我有一个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.