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
rempara ver o que o arquivo em lote está fazendo. - Adicione
echoà linha de carga útil comnircmd. - Remova o
echoquando achar que está funcionando. - Em alguns lugares, é necessário usar
!em vez de%dentro doforloop (é para isso queenabledelayedexpansionserve - 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.