【问题标题】:Escape special character in a windows batch在 Windows 批处理中转义特殊字符
【发布时间】:2015-09-28 16:07:11
【问题描述】:

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

调用类似这样

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

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

【问题讨论】:

    标签: batch-file special-characters


    【解决方案1】:

    您需要在命令行中转义插入符号,或者最好将路径放在引号中。

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

    myBatch "C:\LASTNAME^Firstname\image"
    

    myBatch C:\LASTNAME^^Firstname\image
    

    在你的批次中使用这样的东西

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

    【讨论】:

    • 知道但实际上在使用cd /d !arg1!,当我在echo %cd% 之后,^ 仍然被删除
    • 是的,试试echo !cd!,因为这里的问题是百分比扩展
    【解决方案2】:

    您需要对其进行两次转义 - 一次是在您输入路径作为批处理脚本的参数时,另一次是在回显它时:

    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
    

    【讨论】:

    • 恕我直言,内容应该是clean,因为它不应该包含额外的插入符号来处理百分比扩展,因为当你尝试使用它时处理情况会变得很讨厌也带引号。在大多数情况下,延迟扩展是正确的选择
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    相关资源
    最近更新 更多