转义Windows批处理

时间:2015-09-28 07:41:54

标签: batch-file special-characters

我有一个批处理文件,它接收路径作为第一个参数。路径始终由特殊字符组成,例如^éè

此呼叫与此类似

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

我还尝试将^放在引号之间,但这不起作用

2 个答案:

答案 0 :(得分:1)

您需要在命令行中转义插入标记或更好地将路径放入引号。

在这两种情况下,您都应该使用延迟扩展,因为在扩展内容时不会修改内容。

myBatch "C:\LASTNAME^Firstname\image"

myBatch C:\LASTNAME^^Firstname\image

在你的批处理中使用像这样的东西

@echo off
set "arg1=%~1"
setlocal EnableDelayedExpansion
echo !arg1!

答案 1 :(得分:0)

你需要将它转义两次 - 一次输入路径作为批处理脚本的参数时,再次回显它时:

<强> 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