Se eu executar isso em um arquivo de lote dentro da pasta de arquivos MP4, ele funciona para definir o último arquivo MP4 modificado como uma variável, para que possa ser reproduzido com o media player padrão:
:: 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%"
Se eu tentar colocar o seguinte em um arquivo de lote fora da pasta de arquivos MP4, então cd /d
for ignorado pelo loop for, não está funcionando:
:: 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%"
Como você pode ver, o comando for loop é exatamente o mesmo em cada exemplo. Funciona no primeiro, mas não no segundo.
Tentei colocar pause
entre cada comando para ver se aparece algum erro, nenhum aparece.
Eu tentei tirar as aspas duplas %CD%
- não faz diferença.
Tentei colocar Setlocal EnableDelayedExpansion
antes dos comandos, não faz nada.
Anteriormente, tentei especificar a pasta diretamente no loop FOR, adicionando /S
ao comando DIR, mas isso copia o arquivo MP4 errado por algum motivo, onde a data modificada era uma data aleatória sem sentido, não era o último MP4 modificado. Esse comando ficou assim:
for /f "eol=: delims=" %%F in ('dir /B /S /O:D "C:\My Videos\*.mp4"') do @set "newest=%%F"
Isso define um MP4 como variável... mas não o correto!
Usando um arquivo de lote dentro da pasta de arquivos MP4, sei que sempre funciona dessa maneira.
Desde já agradeço a todos que puderem esclarecer por que isso não está funcionando.
Seu script assume que
%CD%
preservará seu valor original do começo ao fim. Mas não é assim que essa variável funciona – ela é atualizada dinamicamente pelo interpretador para sempre representar o diretório atual. E após o seu primeirocd
comando, o caminhoC:\My Videos
se torna o diretório "atual".Então, você
dir
procura por arquivos no novo local excopy
tenta copiar os arquivos encontrados de volta para o mesmo local em que foram encontrados e, finalmente,cd /d "%CD%"
apenas diz "mude para o diretório em que já estou". Ele não o levará de volta ao local anterior, porque neste ponto %CD% é "C:\Meus vídeos".Você precisa gravar explicitamente o caminho anterior antes de gravar em outro lugar, por exemplo, usando
set "PrevDir=%CD%"
.