2015-12-04 110 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" 
    ) 
)