我想删除目录中的所有 pdf 文件,除了两个文件名定义为变量exception1
和的文件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
这将生成一条错误消息:
else was unexpected at this time
我也尝试过这个,但它也不起作用:
if /i not "%%~nxf"=="%exception1%" and not "%%~nxf"=="%exception2%"
我是否遗漏了什么?
您正在使用双引号引用异常文件名。
首先你有这个:
以及之后
其计算结果为
因此将异常值更改为
将会修复它。
你尝试过这个吗?
据我所知,我并不是最好的脚本编写者。在批处理中,每个 if 语句都需要将其 else 放在同一行或正确括起来以避免语法问题。此外,我在这里所做的是,而不是使用嵌套的 If 语句,而是将两者合并为一个,因为我一直觉得这种方法更容易、更易读。此外,该行
echo Deleting "%%f
会向您反馈删除了哪些内容。如果您不想要这个,只需注释掉该行即可。/i 使比较区分大小写