批处理文件处理文件夹名称中的符号 (&)
batch file deal with Ampersand (&) in folder name
下面的批处理文件:
@echo off
set filelocation=C:\Users\myself\Documents\This&That
cd %filelocation%
echo %filelocation%
pause
给出以下输出:
'That' is not recognized as an internal or external command,
operable program or batch file.
The system cannot find the path specified.
C:\Users\myself\Documents\This
Press any key to continue . . .
考虑到我无法更改文件夹名称,我该如何处理“&”
这里有两种方法:
一个。引用字符串;例如:
set "filelocation=C:\Users\myself\Documents\This&That"
b。使用转义字符;例如:
set filelocation=C:\Users\myself\Documents\This^&That
要在 cd
命令中使用该路径,请将其括在引号中。
cd /d "%filelocation%"
您需要进行两处更改。
1) 带引号的扩展集语法在变量名前缀和内容末尾
2) 延迟扩展以安全的方式使用变量
setlocal enableDelayedExpansion
set "filelocation=C:\Users\myself\Documents\This&That"
cd !filelocation!
echo !filelocation!
延迟扩展的工作方式类似于百分比扩展,但必须首先使用 setlocal EnableDelayedExpansion
启用它,然后变量可以使用感叹号 !variable!
扩展,并且仍然使用百分比 %variable%
.
延迟扩展变量的优点是扩展总是安全的。
但是就像百分比扩展一样,当你需要它作为内容时你必须加倍百分比,当你将它用作内容时你必须用脱字符转义感叹号。
set "var1=This is a percent %%"
set "var2=This is a percent ^!"
不同于, I don't think you need delayed expansion以安全的方式使用变量。适当的引用可以满足大多数使用:
@echo off
SETLOCAL EnableExtensions DisableDelayedExpansion
set "filelocation=C:\Users\myself\Documents\This&That"
cd "%filelocation%"
echo "%filelocation%"
rem more examples:
dir /B "%filelocation%\*.doc"
cd
echo "%CD%"
md "%filelocation%\sub&folder"
set "otherlocation=%filelocation:&=!%" this gives expected result
SETLOCAL EnableDelayedExpansion
set "otherlocation=%filelocation:&=!%" this gives unexpected result
ENDLOCAL
pause
此外,这是通用解决方案,延迟扩展可能会在处理的字符串中出现 !
感叹号时失败(例如上面的最后一个 set
命令)。
下面的批处理文件:
@echo off
set filelocation=C:\Users\myself\Documents\This&That
cd %filelocation%
echo %filelocation%
pause
给出以下输出:
'That' is not recognized as an internal or external command,
operable program or batch file.
The system cannot find the path specified.
C:\Users\myself\Documents\This
Press any key to continue . . .
考虑到我无法更改文件夹名称,我该如何处理“&”
这里有两种方法:
一个。引用字符串;例如:
set "filelocation=C:\Users\myself\Documents\This&That"
b。使用转义字符;例如:
set filelocation=C:\Users\myself\Documents\This^&That
要在 cd
命令中使用该路径,请将其括在引号中。
cd /d "%filelocation%"
您需要进行两处更改。
1) 带引号的扩展集语法在变量名前缀和内容末尾
2) 延迟扩展以安全的方式使用变量
setlocal enableDelayedExpansion
set "filelocation=C:\Users\myself\Documents\This&That"
cd !filelocation!
echo !filelocation!
延迟扩展的工作方式类似于百分比扩展,但必须首先使用 setlocal EnableDelayedExpansion
启用它,然后变量可以使用感叹号 !variable!
扩展,并且仍然使用百分比 %variable%
.
延迟扩展变量的优点是扩展总是安全的。
但是就像百分比扩展一样,当你需要它作为内容时你必须加倍百分比,当你将它用作内容时你必须用脱字符转义感叹号。
set "var1=This is a percent %%"
set "var2=This is a percent ^!"
不同于
@echo off
SETLOCAL EnableExtensions DisableDelayedExpansion
set "filelocation=C:\Users\myself\Documents\This&That"
cd "%filelocation%"
echo "%filelocation%"
rem more examples:
dir /B "%filelocation%\*.doc"
cd
echo "%CD%"
md "%filelocation%\sub&folder"
set "otherlocation=%filelocation:&=!%" this gives expected result
SETLOCAL EnableDelayedExpansion
set "otherlocation=%filelocation:&=!%" this gives unexpected result
ENDLOCAL
pause
此外,这是通用解决方案,延迟扩展可能会在处理的字符串中出现 !
感叹号时失败(例如上面的最后一个 set
命令)。