Como isso pode ser reescrito para funcionar?
Você tem vários problemas com seu arquivo em lotes:
- Não é
%f
. Você precisa usar%%f
.%f
é para uma linha de comando, que precisa ser corrigida em pelo menos três locais. - Eu colocaria os comandos dentro do
do ( ... )
em linhas separadas. - Você pode colocar uma pausa antes do fechamento
)
- Você pode comentar a primeira linha com
rem
para ver o que o arquivo em lote está fazendo. - Adicione
echo
à linha de carga útil comnircmd
. - Remova o
echo
quando achar que está funcionando. - Em alguns lugares, é necessário usar
!
em vez de%
dentro dofor
loop (é para isso queenabledelayedexpansion
serve - ele permite que as variáveis sejam expandidas em tempo de execução e não em tempo de análise
Comece com o seguinte arquivo em lote (corrigi os principais erros para você):
@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
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- enabledelayedexpansion - Expansão com atraso fará com que as variáveis sejam expandidas em tempo de execução e não no tempo de análise.
- para / r - Fazer um loop pelos arquivos (criar subpastas).
- definir - Exibir, definir ou remover variáveis de ambiente do CMD. As alterações feitas com o SET permanecerão apenas pela duração da sessão atual do CMD.
- setlocal - Defina opções para controlar a visibilidade de variáveis de ambiente em um arquivo em lotes.