批量清理参数
Batch sanitize arguments
我有以下脚本片段:
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 语句,我需要以某种方式转义它。是否有可能适当地清理输入?
按照 SomethingDark and 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 /?
在命令提示符中 window 有关 %~2
(不带引号的第二个参数)、%~dp1
(第一个驱动器和路径)的详细信息不带引号的参数)和 %~f1
(第一个参数的文件名,带驱动器和不带引号的路径)和 if /?
有关在批处理文件中使用条件的详细信息。
如果此问题是由路径末尾的反斜杠引起的(如您在评论中指出的那样),则只需将其删除:
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"
)
)
我有以下脚本片段:
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 语句,我需要以某种方式转义它。是否有可能适当地清理输入?
按照 SomethingDark and 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 /?
在命令提示符中 window 有关 %~2
(不带引号的第二个参数)、%~dp1
(第一个驱动器和路径)的详细信息不带引号的参数)和 %~f1
(第一个参数的文件名,带驱动器和不带引号的路径)和 if /?
有关在批处理文件中使用条件的详细信息。
如果此问题是由路径末尾的反斜杠引起的(如您在评论中指出的那样),则只需将其删除:
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"
)
)