schmakus
Goto Top

Batch Datei - Mehrzeilige Textdatei

Hallo Zusammen,

ich möchte mit einer Batch Datei eine Textdatei erstellen.
Ich verwende 2 Variablen (%1, %2).

Die Textdatei ist schon vorhanden und sieht so aus (%1 = ELW oder LF20, %2 = 2 oder 1):

ELW: 2
LF20: 2
LF8: 1
DLK: 2
LF16: 2
GWT: 2
MTW: 1

Wie kann ich nun hinbekommen, dass wenn meine Batch Ausführung so aussieht (batch.bat LF8 2), dass genau in dieser Zeile
der Wert von 1 auf 2 geändert wird?

Geht das grundsätzlich mit Batch oder muss ich einen anderen Weg einschlagen?

Viele Grüße
Schmakus

Content-Key: 271941

Url: https://administrator.de/contentid/271941

Printed on: April 19, 2024 at 13:04 o'clock

Member: bastla
Solution bastla May 13, 2015, updated at May 14, 2015 at 08:23:03 (UTC)
Goto Top
Hallo Schmakus und willkommen im Forum!

Schematisch als Batch etwa so:
@echo off & setlocal
set "Datei=D:\Deine Textdatei.txt"  

if [%2]== (
    echo\
    echo Parameter fehlt!
    echo\
    echo Aufruf mit:    %~0 Bezeichnung Wert
    echo\
    pause
    goto :eof
)
set "DatTemp=%temp%\Datei.tmp"  
move "%Datei%" "%DatTemp%"  
for /f "usebackq tokens=1-2" %%i in ("%DatTemp%") do (  
    if "%%i" neq "%1:" (  
        echo %%i %%j
    ) else (
        echo %1: %2
    )
)>>"%Datei%"  
Wenn Du nicht möchtest, dass die Temporärdatei (als Sicherung) erhalten bleibt, am Ende noch die Zeile
del "%DatTemp%"
hinzufügen ...

Grüße
bastla
Mitglied: 114757
114757 May 13, 2015 at 16:24:30 (UTC)
Goto Top
Oder mit Powershell ein Einzeiler:
(gc 'C:\datei.txt') -replace "(?m)^$([regex]::Escape($args)).*","$($args): $($args[1])" | out-file 'C:\datei.txt'  
Aufruf dann gleich:
C:\script.ps1 "LF8" "2"
Gruß jodel32
Member: Schmakus
Schmakus May 13, 2015 updated at 19:28:44 (UTC)
Goto Top
Hi,

super, danke für die schnelle Hilfe.
Jedoch bin ich nun auf eine ganz andere, vermutlich bessere Idee gekommen:

Der Sinn dahinter war, die Textfile mit Hilfe eines PHP-Scripts auslesen und den Inhalt in eine SQL Datenbank zu schreiben.
Nun kam mir der Gedanke, direkt ein PHP-Script aufzurufen.

Dies wollte ich machen mit Hilfe einer Batch (oder direkt).

Hier die Batch:
*
@echo off & setlocal

set fzg=%1
set status=%2

c:\xampp\php\php.exe "c:\xampp\htdocs\alarm\status2.php?fahrzeug=%fzg&status=%status%"
*

Jedoch kommt der Fehler: "could not open input file: c:\xampp\htdocs\alarm\status2.php?fahrzeug=elw&status=1"

Zum einen erscheint der Fehler, auch wenn ich anstatt den Variablen gleich Werte einfüge.

Wie lässt sich das lösen?
Achja, wenn ich das PHP-Script ohne die Variablen, also "status2.php", aufrufe gehts.

Grüße
Schmakus
Mitglied: 114757
Solution 114757 May 14, 2015 updated at 08:23:44 (UTC)
Goto Top
Moin Schmackus,
Jedoch kommt der Fehler: "could not open input file: c:\xampp\htdocs\alarm\status2.php?fahrzeug=elw&status=1"
Das geht so nicht. PHP erwartet hier nur den Pfad zu einer PHP Datei. Get-Parameter kannst du nur mit einem URL-Aufruf mitgeben!
Man kann aber auf der Kommandozeile auch Parameter mitgeben:
http://php.net/manual/de/install.windows.commandline.php
Jedoch müssen diese dann stattdessen über die Variable $argv im PHP-Script ausgewertet werden.
Das ließe sich ja bei Bedarf ganz einfach zusätzlich im Script ergänzen.

Alternativ lässt sich ein URL-Aufruf aber auch so triggern:
powershell.exe -ExecutionPolicy Bypass -Command "&{(New-Object System.Net.WebClient).DownloadString('http://localhost/alarm/status2.php?fahrzeug=elw&status=1')}"
Gruß jodel32
Member: Schmakus
Schmakus May 14, 2015 at 08:09:29 (UTC)
Goto Top
Hi,
Hab's heute Nacht noch selbst lösen können.
Musste das PHP Script ohne die Argumente in Anführungszeichen setzten.
Anschließend die Argumente dahinter und dann via $argv im Script verarbeitet.

*
c:\xampp\php\php.exe "c:\xampp\htdocs\alarm\status2.php" Argument1 Argument2
*

Trotzdem danke!