如果标注命令行中有反斜线,Site Recovery Manager 会使所有反斜线数量增加为原来的两倍。

问题

命令行系统解释程序仅将文件路径中的双反斜线视为单反斜线。如果标注命令在参数中而不是在文件路径中需要反斜线,且该命令无法将双反斜线转换为单反斜线,则标注命令可能会失败,并发出错误消息。

例如,可以向工作流添加标注步骤并输入以下文本作为命令:

c:\Windows\system32\cmd.exe /C "C:\myscript.cmd" a/b/c \d\e\f \\g\\h c:\myscript.log

作为标注步骤的结果,Site Recovery Manager 将运行以下命令:

c:\\Windows\\system32\\cmd.exe /C "C:\\myscript.cmd" a/b/c \\d\\e\\f \\\\g\\\\h c:\\myscript.log

如果 myscript.cmd 未将双反斜线更改为单反斜线,且参数 \d\e\f\\g\\h 将区分反斜线的个数,则 myscript.cmd 会失败。

解决方案

  1. 另外创建一个命令行批处理文件,以包含命令和全部所需的参数。标注步骤无需任何参数即可运行此另外创建的批处理文件。例如,解决方案如下所示:
    1. 在文本编辑器(如记事本)中,创建文件 c:\SRM_callout.cmd,该文件包含以下内容:C:\myscript.cmd a/b/c \d\e\f \\g\\h c:\myscript.log
    2. 在恢复计划标注步骤中,输入要运行的命令: c:\\Windows\\system32\\cmd.exe /C c:\SRM_callout.cmd
  2. 向使用单反斜线替换双反斜线的原始脚本文件中添加代码。
    1. 在脚本文件 c:\myscript.cmd 的开头添加类似于以下示例的代码。
      @echo off
      set arg2=%2
      set arg3=%3
      set fixed_arg2=%arg2:\\=\%
      set fixed_arg3=%arg3:\\=\%
      

      如果在脚本中使用 shift 命令,则所有与反斜线相关的参数都以这种方式处理。

    2. 如果在脚本中不使用 shift 命令,请进行以下更改:

      %2 替换为 %fixed_arg2%

      %3 替换为 %fixed_arg3%

    3. 请勿更改标注步骤命令。