2017-09-25 105 views
1

所以我有下面的函數來記錄一些信息的腳本:批處理文件逃逸括號傳遞給函數

:Log <Message> <Verbosity> 
::%1 - string to log 
::%2 - verbosity level for string 
    ECHO:%~1 
    IF "%verbosity%" GEQ "%~2" (
     ECHO:%DATE:~4,2%/%DATE:~7,2%/%DATE:~10,4% %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2% - %me% - %~1 >> "%logFile%" 
    ) 
    ECHO:%DATE:~4,2%/%DATE:~7,2%/%DATE:~10,4% %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2% - %me% - %~1 >> "%debuglogFile%" 
    Exit /B 0 

,直到我通過)到它,它的偉大工程。這似乎是關閉我的if語句。

E:\Resources>CALL :Log "Found checkinstall:!value! in E:\Configs\DASABCIP.ini." 3 

E:\Resources>ECHO:Found checkinstall:C:\Program Files (x86)\Wonderware\DAServer\DASABCIP\Bin\DASABCIP.exe in E:\Configs\DASABCIP.ini. 
Found checkinstall:C:\Program Files (x86)\Wonderware\DAServer\DASABCIP\Bin\DASABCIP.exe in E:\Configs\DASABCIP.ini. 

\Wonderware\DAServer\DASABCIP\Bin\DASABCIP.exe was unexpected at this time. 

E:\Resources>ECHO:09/25/2017 16:31:15 - WorkerScript - Found checkinstall:C:\Program Files (x86)\Wonderware\DAServer\DASABCIP\Bin\DASABCIP.exe in E:\Configs\DASABCIP.ini. >> "E:\Log.txt" 

我已經嘗試使用延遲擴展如前所述here,但我無法弄清楚如何做到這一點與%1變量。 嘗試!1!時,它們只會以空字符串結尾。 我也嘗試使用message =%1:)= ^)%做一個字符串替換,但是沒有任何運氣去那條路線。我如何正確地在變量中隱藏括號?

+0

你嘗試:'ECHO「%〜1」' – Squashman

+1

您只能使用環境變量延遲擴展。您不能將它與命令行參數或FOR變量一起使用。所以你可以將命令行參數分配給一個環境變量。啓用延遲擴展。然後通過在感嘆號中包圍變量名稱來使用具有延遲擴展的變量。 – Squashman

+1

'(x86)'中的右括號關閉了'IF'。您可以通過刪除「IF」括號來修復它,因爲它們不是必需的。 'IF%詳細率%GEQ%〜2 ECHO:%日期:〜4,2%/%日期:〜7,2%/%日期:〜10,4%%時間:〜,2%:%TIME:〜3 ,2%:%TIME:〜6.2% - %me% - %〜1 >>「%logFile%」'。 – Compo

回答

1

這裏是一個測試蝙蝠,顯示你如何顯示一個paren或一個paren字符串。

@echo off 
setlocal enabledelayedexpansion 
set _test_=%2 
if %1==0 (
    echo %1 
    echo "%2" 
    echo %3 
    echo !_test_! 
) 

運行此:

paren.bat 0) test 

輸出是:

0 
")" 
test 
) 

你可能沒有想到什麼,是這樣的:

paren.bat)) test 

結果:

")" 
test 
) 

我認爲Squashman是設置var並使用它的東西。參數中的Parens有些不可預知。