2017-09-25 2 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 에코 : % 날짜 : ~ 4,2 %/% 날짜 : ~ 7,2 %/% 날짜 : ~ 10,4 % % 시간 : ~ 2 % : % 시간 : ~ 3 , 2 % : % TIME : ~ 6,2 % - % me % - % ~ 1 >> "% logFile %"'. – Compo

답변

1

다음은 괄호로 괄호 또는 문자열을 표시하는 방법을 보여주는 테스트 용 박쥐입니다.

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

이 실행 :

paren.bat 0) test 

출력은 다음과 같습니다

paren.bat)) test 

결과 :

,536

예상하지 않을 수 있습니다 무엇
0 
")" 
test 
) 

, 그이있다

")" 
test 
) 

스쿼시 맨은 var를 설정하고 사용하는 것으로 생각합니다. 매개 변수의 괄호는 다소 예측할 수 없습니다.