2015-12-04 75 views
1

我有以下脚本片段:批次消毒参数

if not {%2}=={} (
    if not {%3}=={} (
     "%~dp0otrtool\otrtool.exe" -x -e %2 -p %3 -D "%~dp1"" "%~f1" 
    ) 
) 

如果我使用一个右括号用于输入我得到一个错误:

C:\>script.bat).txt 

输出如下:

"test"" can not be processed syntactically at this point. 

C:\>  "d:\Scripts\OTRTools\otrtool\otrtool.exe" -x -e -p -D "C:\"" "C:\)test" 

看起来支架正在关闭if语句之一,我需要以某种方式逃避它。有没有可能对输入进行适当的卫生处理?

+2

尝试使用引号来代替大括号。 – SomethingDark

+2

除了像以前的评论建议一样使用引号外,还有一个额外的引用:'“%〜dp1”“”%〜f1“'。是您的文件名为“).TXT”?这是一个糟糕的主意...... – Aacini

+0

嗯,我添加了额外的报价,因为我有一个反斜杠的问题。'〜dp1'返回到包括最后一个反斜杠的文件夹的绝对路径,例如'D:\ Stuff \',所以调用看起来像这样:“D:\ Scripts \ OTRTools \ otrtool \ otrtool.exe”-x -e -p -D“D:\ Stuff \”“D:\ test.otrkey“'因为该工具与GCC-cygwin的编译,我认为反斜杠被视为转义字符,因为我得到一个错误:‘缺少参数:otrkey文件’,这表明,该'” d:\东西\”‘d:\ test.otrkey’'被视为一个单一的参数文件名 –

回答

0

SomethingDarkAacini的建议应用于修复的批量代码:

if not "%~2" == "" (
    if not "%~3" == "" (
     "%~dp0otrtool\otrtool.exe" -x -e "%~2" -p "%~3" -D "%~dp1" "%~f1" 
    ) 
) 

它使用的字符串比较%~2,而不是仅仅%2以避免收到关于执行例如if not ""second parameter"" == ""因为这将是非常重要的再次是语法错误。在细节上的命令提示窗口

运行call /?%~2(没有引号第二个参数),%~dp1%~f1(第一参数与驱动器和路径没有引号文件名)和if /?(驱动器和没有引号第一参数的路径)有关在批处理文件中使用条件的详细信息

0

如果这个问题是通过在路径的末尾反斜杠(如您在您的评论表示)造成的,那么只是将其删除:

set "myPath=%~dp1" 
if "%myPath:~-1%" equ "\" set "myPath=%myPath:~0,-1%" 
if not "%~2" == "" (
    if not "%~3" == "" (
     "%~dp0otrtool\otrtool.exe" -x -e "%~2" -p "%~3" -D "%myPath%" "%~f1" 
    ) 
)