Quero excluir todos os arquivos PDF de um diretório, exceto dois com nomes de arquivo definidos como variáveis exception1
e exception2
.
chcp 65001
setlocal ENABLEDELAYEDEXPANSION
set pathname=%~p1
set letter=%~d1
pushd %letter%%pathname%
chcp
set exception1="218-0553.2.pdf"
set exception2="218-0553.2 test.pdf"
pause
dir *.pdf
for %%f in (*.pdf) do (
if /i not "%%~nxf"=="%exception1%" (
if /i not "%%~nxf"=="%exception2%" (
echo Deleting "%%f"
del "%%f"
) else (
echo Keeping "%%f"
)
) else (
echo Keeping "%%f"
)
)
popd
endlocal
Isso gera uma mensagem de erro:
else was unexpected at this time
Eu também tentei isso, mas também não funciona:
if /i not "%%~nxf"=="%exception1%" and not "%%~nxf"=="%exception2%"
Há algo que estou esquecendo?
Você está colocando aspas duplas nos nomes dos arquivos de exceção.
Primeiro você tem isto:
e depois
que irá avaliar para
Então, alterando os valores de exceção para
vai consertar isso.
Você já tentou isso?
até onde eu sei e eu não sou o melhor scripter de longe. No Batch, cada instrução if precisa de seu else na mesma linha ou fechado corretamente para evitar problemas de sintaxe. Além disso, o que eu fiz aqui foi, em vez de usar instruções If aninhadas, combinar ambas em uma, pois sempre achei essa abordagem muito mais fácil e legível. Além disso, a linha
echo Deleting "%%f
fornece feedback sobre o que foi excluído. Se você não quiser isso, basta comentar a linha. o /i torna a comparação sensível a maiúsculas e minúsculas