我有一个批处理文件:C:\zzzztemp\zzzBUG_TEST.cmd
set backup_folder=.\BUG_TEST
echo %backup_folder%\*.*
del %backup_folder%\*.*
pause
...其输出是:
C:\zzzztemp>set backup_folder=.\BUG_TEST
C:\zzzztemp>echo .\BUG_TEST\*.*
.\BUG_TEST\*.*
C:\zzzztemp>del .\BUG_TEST\*.*
C:\zzzztemp\BUG_TEST\*.*, Are you sure (Y/N)? y
C:\zzzztemp>pause
Press any key to continue . . .
到目前为止一切顺利,正如预期的那样。
但是,如果我在指定文件夹变量的末尾不小心有一个选项卡
set backup_folder=.\BUG_TEST{accidentally had a tab here}
结果是:
C:\zzzztemp>set backup_folder=.\BUG_TEST
C:\zzzztemp>echo .\BUG_TEST \*.*
.\BUG_TEST \*.*
C:\zzzztemp>del .\BUG_TEST \*.*
C:\zzzztemp\BUG_TEST\*, Are you sure (Y/N)? y
C:\*.*, Are you sure (Y/N)?
正如您从 echo 输出中看到的那样,这被解释为 DEL 命令的两个参数,因此 DEL 操作在两个文件夹上执行了两次,其中一个是c:\*.*
如果要使用 /Q 运行此删除(安静,不需要提示确认删除),他可以清除 c: 根目录中的所有文件!
所以,我想我的问题归结为......
有没有安全的写法:
del %backup_folder%\*.*
...这样我会得到一个运行时错误,而不是在一个看不见的选项卡被附加到变量赋值的情况下无意执行带有两个参数的删除?