在 windows 批次中转义特殊字符
Escape special character in a windows batch
我有一个接收路径作为第一个参数的批处理文件。路径总是由特殊字符组成,例如 ^
、é
或 è
.
调用类似这样
D:\Script>MyBatch My\path\test_00170_LASTNAME^Firstname\image
总是出现这个错误:未知的指定路径
当我回显 bash 中的第一个参数时,我可以看到(注意缺少的 ^
)
My\path\test_00170_LASTNAMEFirstname\image
所以我试图通过在
之前添加另一个 ^
来转义这个字符
My\path\test_00170_LASTNAME^^Firstname\image
但是当我回应这个时,我得到了相同的结果...
My\path\test_00170_LASTNAMEFirstname\image
我也尝试将 ^
放在引号之间,但这没有用
您需要对其进行两次转义 - 一次是将路径作为参数输入批处理脚本时,另一次是在回显它时:
caret_input.bat:
echo %1
双重转义(注意批处理文件开始输出时它是如何转义的):
C:\>caret_input.bat my\path^^^^is\special
C:\>echo my\path^is\special
my\path^is\special
如果您要在批处理文件中使用带有特殊字符的字符串,您只转义它一次的方法就可以正常工作:
caret_escape.bat:
echo my\path^^is\special
和输出
C:\>echo my\path^is\special
my\path^is\special
您需要在命令行中转义插入符号,或者最好将路径放入引号中。
在这两种情况下,您都应该使用延迟展开,因为这样内容在展开时不会被修改。
myBatch "C:\LASTNAME^Firstname\image"
或
myBatch C:\LASTNAME^^Firstname\image
并且在你的批处理中使用这样的东西
@echo off
set "arg1=%~1"
setlocal EnableDelayedExpansion
echo !arg1!
我有一个接收路径作为第一个参数的批处理文件。路径总是由特殊字符组成,例如 ^
、é
或 è
.
调用类似这样
D:\Script>MyBatch My\path\test_00170_LASTNAME^Firstname\image
总是出现这个错误:未知的指定路径
当我回显 bash 中的第一个参数时,我可以看到(注意缺少的 ^
)
My\path\test_00170_LASTNAMEFirstname\image
所以我试图通过在
之前添加另一个^
来转义这个字符
My\path\test_00170_LASTNAME^^Firstname\image
但是当我回应这个时,我得到了相同的结果...
My\path\test_00170_LASTNAMEFirstname\image
我也尝试将 ^
放在引号之间,但这没有用
您需要对其进行两次转义 - 一次是将路径作为参数输入批处理脚本时,另一次是在回显它时:
caret_input.bat:
echo %1
双重转义(注意批处理文件开始输出时它是如何转义的):
C:\>caret_input.bat my\path^^^^is\special
C:\>echo my\path^is\special
my\path^is\special
如果您要在批处理文件中使用带有特殊字符的字符串,您只转义它一次的方法就可以正常工作:
caret_escape.bat:
echo my\path^^is\special
和输出
C:\>echo my\path^is\special
my\path^is\special
您需要在命令行中转义插入符号,或者最好将路径放入引号中。
在这两种情况下,您都应该使用延迟展开,因为这样内容在展开时不会被修改。
myBatch "C:\LASTNAME^Firstname\image"
或
myBatch C:\LASTNAME^^Firstname\image
并且在你的批处理中使用这样的东西
@echo off
set "arg1=%~1"
setlocal EnableDelayedExpansion
echo !arg1!