传递给函数的批处理文件转义括号

时间:2017-09-25 20:59:15

标签: batch-file escaping

所以我有以下函数来记录脚本中的一些信息:

: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

在我通过a)之前它很有效。这似乎正在关闭我的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:)= ^)%进行字符串替换,但也没有任何运气去那条路线。如何正确转义变量中的括号?

1 个答案:

答案 0 :(得分: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有点不可预测。