2017-09-25 59 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有些不可预知。