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.txt
zu
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