在 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!