我有以下脚本代码段:
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语句,我需要以某种方式逃避它。是否有可能对输入进行适当的消毒?
答案 0 :(得分:0)
根据SomethingDark和Aacini 的建议应用修补程序的批处理代码:
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 /?
有关在批处理文件中使用条件的详细信息。
答案 1 :(得分: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"
)
)