Trojaner-Board

Trojaner-Board (https://www.trojaner-board.de/)
-   Alles rund um Windows (https://www.trojaner-board.de/alles-rund-um-windows/)
-   -   Batch: Problem (Zeichentausch) (https://www.trojaner-board.de/68030-batch-problem-zeichentausch.html)

MightyMarc 05.01.2009 20:24

Batch: Problem (Zeichentausch)
 
Ich seh den Wald vor lauter Bäumen nicht :heulen:

1. Ausgabe von systeminfo in Datei umleiten.
2. Inahlt der Datei in Variable speichern
3. in der Variablen die Anführungszeichen ersetzen (mit Raute)
// bis dahin funktioniert alles //
4. Inhalt der Variable in Datei schreiben (funktioniert bei mir unter gar keinen Umständen - keine Fehlermeldung, nix)

Wo stell ich mich grad besonders blöd an?
Code:

systeminfo /FO CSV > %tmp%\sysinfo.log
for /f %%a in ('more +2 %tmp%\sysinfo_raw.log') do (
        set text=%%a
        set text=%text:"=#%
        echo %text% >> %tmp%\sysinfo_clean.log
        )
pause
exit


KarlKarl 06.01.2009 01:37

Mir ist nicht so ganz klar, wozu das gut sein soll, aber ich sehe da drei potentielle Probleme:

1. Leitest Du die Ausgabe in eine andere Datei um als Du dann zum lesen benutzt. Hab also den Dateinamen geändert.

2. Hinter "for" wird der Variablen a nur der erste Teil aus der Datei zugwiesen, und zwar bis zum ersten Leerzeichen. Hab "tokens=*" hinzugefügt.

3. Wird %text% gleich zu Anfang der Batchdatei ausgewertet, also zu einem Zeitpunkt, wo die Variable text nicht vorhanden ist. Damit wird eine leere Zeichenfolge eingesetzt. Anstelle von "%" benutze ich "!", diese Art des Variableneinsatzes bewirkt, dass erst später zur Ausführung die Variable eingesetzt wird, dann wenn sie den richtigen Wert schon hat. Da das eine Möglichkeit ist, die je nach Konfiguration nicht immer von cmd.exe genutzt werden kann, schaltet die zusätzliche Zeile "setlocal enabledelayedexpansion" diese Möglichkeit ein.

Raus kommt:

Code:

systeminfo /FO CSV > %tmp%\sysinfo_raw.log
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in ('more +2 %tmp%\sysinfo_raw.log') do (
    set text=%%a
    set text=!text:"=#!
    echo !text! >> %tmp%\sysinfo_clean.log
    )
pause
exit

Und das erzeugt bei mir eine Ausgabe, von der ich mir vorstellen kann, dass sie gemeint sein könnte.

Schließlich sollte ">>" vielleicht noch durch ">" ersetzt werden, da die Ausgabedatei ansonsten bei jedem Aufruf nur verlängert wird.

MightyMarc 06.01.2009 16:06

Zitat:

Zitat von KarlKarl (Beitrag 403730)
Mir ist nicht so ganz klar, wozu das gut sein soll,...

Ehrlich kann ich darin inzwischen auch keinen Sinn mehr erkennen.
Instinktiv versuche ich immer erst eine Batchdatei, bevor mir wieder siedendheiß einfällt, dass ich mit einem Powershellscript nur ein Drittel der Zeit und ein Viertel des Codes benötige (bei einigen Dingen).
Diese Batch ist auf jeden Fall im Müll gelandet.

Trotzdem Danke, KarlKarl.

Marc

PS: täuscht es oder ist die Powershell immer noch nicht sonderlich verbreitet?

putty 07.01.2009 12:26

Zitat:

Zitat von KarlKarl (Beitrag 403730)
3. Wird %text% gleich zu Anfang der Batchdatei ausgewertet, also zu einem Zeitpunkt, wo die Variable text nicht vorhanden ist. Damit wird eine leere Zeichenfolge eingesetzt. Anstelle von "%" benutze ich "!", diese Art des Variableneinsatzes bewirkt, dass erst später zur Ausführung die Variable eingesetzt wird

Danke für diesen interessanten Hinweis! Die Möglickeit, Variablen in !...! zu packen, war mir bisher unbekannt.

Näher lag mir zunächst, das Ersetzen einfach aus der Schleife rauszunehmen:
Code:

for /f "tokens=*" %%a in ('more +2 %tmp%\sysinfo.log') do set text=%%a
set text=%text:"=#%
echo %text% >> %tmp%\sysinfo_clean.log



Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 Uhr.

Copyright ©2000-2025, Trojaner-Board


Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55