Wenn ich dies in einer Batchdatei im Ordner mit den MP4-Dateien ausführe, funktioniert es, um die zuletzt geänderte MP4-Datei als Variable festzulegen, sodass sie mit dem Standard-Mediaplayer abgespielt werden kann:
:: Set last modified MP4 file in current folder, as a variable...
for /f "eol=: delims=" %%F in ('dir /B /O:D *.mp4') do @set "newest=%%F"
:: Play the file (opens in default media player)...
"%newest%"
Wenn ich versuche, Folgendes in eine Batchdatei außerhalb des Ordners mit den MP4-Dateien einzufügen, cd /d
wird es von der For-Schleife ignoriert und funktioniert nicht:
:: Change to directory containing MP4 files...
cd /d "C:\My Videos"
:: Set last modified MP4 file in "C:\My Videos", as a variable (not working)...
for /f "eol=: delims=" %%F in ('dir /B /O:D *.mp4') do @set "newest=%%F"
:: Copy the MP4 to current folder...
xcopy "%newest%" "%CD%" /i /r /v /k /f /c /h /y >nul 2>&1
:: Change back to current directory
cd /d "%CD%"
Wie Sie sehen, ist der For-Schleifenbefehl in beiden Beispielen genau derselbe. Im ersten funktioniert er, im zweiten jedoch nicht.
Ich habe versucht, pause
zwischen die einzelnen Befehle etwas einzufügen, um zu sehen, ob Fehler auftreten, es sind keine aufgetreten.
Ich habe versucht, die doppelten Anführungszeichen ringsum zu entfernen %CD%
– macht keinen Unterschied.
Ich habe versucht, es Setlocal EnableDelayedExpansion
vor die Befehle zu setzen, aber es passiert nichts.
Zuvor habe ich versucht, den Ordner direkt in der FOR-Schleife anzugeben, indem ich ihn /S
dem DIR-Befehl hinzugefügt habe. Dadurch wurde jedoch aus irgendeinem Grund die falsche MP4-Datei kopiert, wobei das Änderungsdatum ein unsinniges Zufallsdatum war und es sich nicht um die zuletzt geänderte MP4-Datei handelte. Dieser Befehl lautete folgendermaßen:
for /f "eol=: delims=" %%F in ('dir /B /S /O:D "C:\My Videos\*.mp4"') do @set "newest=%%F"
Dadurch wird eine MP4 als Variable festgelegt … aber nicht die richtige!
Ich weiß, dass es immer so funktioniert, wenn ich eine Batchdatei im Ordner mit den MP4-Dateien verwende.
Vielen Dank im Voraus an alle, die Licht in die Sache bringen können, warum das nicht funktioniert.
Antwort1
Ihr Skript geht davon aus, dass %CD%
der ursprüngliche Wert von Anfang bis Ende erhalten bleibt. Aber so funktioniert diese Variable nicht – sie wird vom Interpreter dynamisch aktualisiert, um immer das aktuelle Verzeichnis darzustellen. Und nach Ihrem ersten cd
Befehl wird der PfadC:\My Videos
wirddas "aktuelle" Verzeichnis.
Sie suchen also dir
nach Dateien am neuen Speicherort und xcopy
versuchen, die gefundenen Dateien an denselben Speicherort zurückzukopieren, an dem sie gefunden wurden. Schließlich wird cd /d "%CD%"
nur angezeigt: „Wechseln Sie in das Verzeichnis, in dem Sie sich bereits befinden.“ Sie werden nicht zum vorherigen Speicherort zurückgebracht, da an diesem Punkt %CD%Ist„C:\Meine Videos“.
Sie müssen den vorherigen Pfad explizit aufzeichnenVorcd woanders hin, z. B. mithilfe von set "PrevDir=%CD%"
.