我有一个for循环来处理丢弃的文件,但是最近我遇到一个文件名包含&的文件,我得到一个错误& was unexpected at this time。所以我不知道为什么要这样做,我把它附在引号里。
文件名示例:[This_&_That]_FileName.txt
小例子:

FOR /F "tokens=* delims=;" %%P in ("%*") do call :LOOP %%P

:LOOP

if '%1'=='' goto :endloop

echo %1

pause

....

:endloop

exit

这对空格很有用,但对于&符号,它会崩溃。我必须用文件名作为参数从cmd运行.bat文件,才能看到错误。
我试过启用delayedexpansion-就像在这篇文章中一样,要么我没有正确地执行它,要么它对我不起作用:stackoverflow post

最佳答案

Windows资源管理器错误
如果文件名不包含空格字符,则资源管理器不会用双引号将其括起来进行拖放操作。因此,不能在批处理文件中正确地使用与号(&)处理此类文件名。
假设您有以下批次:

@ECHO Off &SETLOCAL
:loop
ECHO "%~1"
SHIFT /1
IF NOT "%~1"=="" GOTO :loop
pause

制作两个文件,例如在命令行上:
type nul>"This_&_That.txt"
type nul>"This & That.txt"

现在转到资源管理器,拖动两个文件并将其放到script.bat中。
让我们看看会发生什么:
“C:\测试\这个和那个.txt”
“C:\测试\此”
按任意键继续。…
Extended explanation.

09-10 02:27
查看更多