So legen Sie das Ergebnis eines Ausdrucks in einer Variablen fest

So legen Sie das Ergebnis eines Ausdrucks in einer Variablen fest

Ich muss das Datum einer Datei extrahieren und dann diese Zeichenfolge als Teil des Namens einer neuen Datei verwenden. Ich habe versucht, dies mit den folgenden Befehlen zu lösen:

Zuerst hole ich mir die Details der Datei und leite die Ausgabe in eine temporäre Datei um.

DIR c:/myfolder/thefile.txt >> tmp.txt

Dann verwende ich FINDSTR, um die Zeile zu erhalten, die das Datum enthält. Falls es eine Möglichkeit gibt, nur das Datum abzurufen, habe ich sie nicht gefunden:

FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt

Die Ausgabe ist:

10/04/2012 07:55 66,029 thefile.txt

Nun möchte ich dieses Ergebnis in eine Variable setzen:

SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt

Es scheint, dass es funktioniert hat, denn wenn ich %vartmp% eingebe, wird das Ergebnis zurückgegeben:

10/04/2012 07:55 66,029 thefile.txt

Aber wenn ich versuche, einen Teil von vartmp zu extrahieren, beginnen die Probleme:

ECHO %vartmp:~0,2%

Es gibt mir die Zeichenfolge „FI“ zurück, obwohl ich „10“ erwartet habe. Es scheint, dass vartmp den Ausdruck speichert und nicht das Ergebnis des Ausdrucks. Ich versuche, das Ergebnis des Ausdrucks einer anderen temporären Variable zuzuweisen und dann eine Teilzeichenfolge der temporären Variable zu extrahieren, aber nichts hat sich geändert.

Antwort1

Mit dem FOR-Befehl können Sie eine Zeile in Tokens zerlegen, sodass Sie nur den gewünschten Teil herausgreifen können. Mit /f können Sie ihn auf die Ausgabe anderer Befehle anwenden, in diesem Fall auf die mit FIND gefilterte Ausgabe von DIR.

for /f "tokens=1" %%a in ('dir thefile.txt ^| Find "thefile.txt"') do (
set vartmp=%%a
)

Antwort2

Es ist nicht ideal, aber könnte sich ändern SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txtzu

FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt > tmp2.txt
SET /p vartmp =< tmp2.txt
DEL tmp2.txt

Antwort3

Beim Befolgen Ihrer Beispiele erhielt ich jedoch dasselbe Ergebnis, wenn ich die Zeile ersetzte:

SET vartmp=FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt

mit

for /f %i in ('FINDSTR [0-9]*\/[0-9]*\/[0-9] tmp.txt') do set vartmp=%i

dann enthält vartmp, was Sie suchen. Beachten Sie, dass Sie hier einfache Anführungszeichen benötigen, doppelte Anführungszeichen funktionieren nicht. Außerdem benötigen Sie bei der Verwendung in einer Batchdatei %%i anstelle von %i

verwandte Informationen