如果我在 MP4 文件文件夹内的批处理文件中运行它,它可以将最后修改的 MP4 文件设置为变量,因此可以使用默认媒体播放器播放:
:: 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%"
如果我尝试将以下内容放在 MP4 文件文件夹之外的批处理文件中,cd /d
则被 for 循环忽略,它不起作用:
:: 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%"
如您所见,每个示例中的 for 循环命令完全相同。它适用于第一个,但不适用于第二个。
我尝试在每个命令之间放置pause
以查看是否出现任何错误,但没有。
我试着从周围去掉双引号%CD%
- 没有区别。
我试着把Setlocal EnableDelayedExpansion
命令放在前面,什么也没做。
以前,我尝试通过添加/S
到 DIR 命令直接在 FOR 循环中指定文件夹,但由于某种原因复制了错误的 MP4 文件,其中修改的日期是无意义的随机日期,它不是最后修改的 MP4。该命令是这样的:
for /f "eol=: delims=" %%F in ('dir /B /S /O:D "C:\My Videos\*.mp4"') do @set "newest=%%F"
这确实将 MP4 设置为变量......但不是正确的!
在 MP4 文件的文件夹中使用批处理文件,我知道它总是这样工作。
提前感谢任何可以解释为什么这不起作用的人。
您的脚本假定
%CD%
它将从头到尾保留其原始值。但这不是这个变量的工作方式——它由解释器动态更新以始终表示当前目录。在您的第一个cd
命令之后,路径C:\My Videos
变为“当前”目录。因此,您
dir
在新位置查找文件,并xcopy
尝试将找到的文件复制回它们所在的相同位置,最后cd /d "%CD%"
只是说“更改到我已经在的目录”。它不会带您回到之前的位置,因为此时 %CD%是“C:\My Videos”。您需要在其他地方 cd'ing之前
set "PrevDir=%CD%"
明确记录以前的路径,例如使用.