
Ich versuche, eine Batchdatei zu schreiben, die jeden Dateinamen durchläuft, einen Teil der Zeichenfolgen übernimmt und die Erstellungs- und Änderungsdaten festlegt. Beachten Sie, dass „dirpath“ ein Platzhalter für den tatsächlichen Pfad ist.
@echo off
setlocal enabledelayedexpansion
FOR /R dirpath %F in (*.*) DO (SET FNAME=%~nF SET MM=%FNAME:~0,2% SET DD=%FNAME:~2,2% SET YY=%FNAME:~4,2% nircmd.exe setfiletime %F "%DD% %MM%-20%YY% 00:00:00" "%DD%-%MM%-20%YY% 00:00:00")
Ich bin mir nicht sicher, wie ich überhaupt das Problem beheben kann, das das Skript macht – Pause pausiert das Programm nach der Schleife nicht. Wie kann dies umgeschrieben werden, damit es funktioniert?
Antwort1
Wie kann dies umgeschrieben werden, damit es funktioniert?
Sie haben eine Reihe von Problemen mit Ihrer Batchdatei:
- Das ist es nicht . Sie müssen stattdessen
%f
verwenden . ist für eine Befehlszeile, die an mindestens 3 Stellen korrigiert werden muss.%%f
%f
- Ich würde die Befehle in
do ( ... )
separate Zeilen einfügen. - Sie können eine Pause vor dem Abschluss einfügen
)
- Sie können die erste Zeile auskommentieren, um
rem
zu sehen, was die Batchdatei macht. - Fügen Sie
echo
der Nutzlastzeile mit hinzunircmd
. - Entfernen Sie es,
echo
wenn Sie glauben, dass es funktioniert. !
Sie müssen an einigen Stellen anstelle von%
innerhalb derfor
Schleife verwenden (dafür istenabledelayedexpansion
es gedacht - es ermöglicht die Erweiterung von Variablen zur Ausführungszeit und nicht zur Analysezeit
Beginnen Sie mit der folgenden Batchdatei (ich habe die wichtigsten Fehler für Sie behoben):
@echo off
setlocal enabledelayedexpansion
for /r dirpath %%F in (*.*) DO (
set FNAME=%%~nF
SET MM=!FNAME:~0,2!
SET DD=!FNAME:~2,2!
SET YY=!FNAME:~4,2!
echo nircmd.exe setfiletime %%F "!DD!-!MM!-20!YY! 00:00:00" "!DD!-!MM!-20!YY! 00:00:00"
pause
)
endlocal
Weitere Informationen
- Ein AZ-Index der Windows CMD-Befehlszeile- Ein hervorragendes Nachschlagewerk zu allem, was mit der Windows-Eingabeaufforderung zu tun hat.
- aktivierte verzögerte Erweiterung- Die verzögerte Erweiterung führt dazu, dass Variablen zur Ausführungszeit und nicht zur Analysezeit erweitert werden.
- für /r- Durch Dateien blättern (Unterordner rekursiv durchsuchen).
- Satz- CMD-Umgebungsvariablen anzeigen, festlegen oder entfernen. Mit SET vorgenommene Änderungen bleiben nur für die Dauer der aktuellen CMD-Sitzung bestehen.
- lokal festlegen- Legen Sie Optionen fest, um die Sichtbarkeit von Umgebungsvariablen in einer Batchdatei zu steuern.
Antwort2
Ich habe eine andere Lösung gefunden, indem ich einfach eine Funktion aufgerufen habe.
FOR /R dirname %%F in (*.*) DO call :Setfiletime %%F
goto End
:Setfiletime
SET FNAME=%~n1
echo %FNAME%
SET MM=%FNAME:~0,2%
SET DD=%FNAME:~2,2%
SET YY=%FNAME:~4,2%
nircmd.exe setfiletime %1 "%DD%-%MM%-20%YY%" "%DD%-%MM%-20%YY%"
:goto :eof
:End
Vielen Dank an alle für Ihre Hilfe.