我正在尝试处理在批处理脚本中编译C ++代码时产生的错误。 我有一个for循环类似于以下内容:
@FOR /F "delims=" %%A IN ('COMMAND TO COMPILE C++') DO @( SET MESSAGE=%%A SET MESSAGE=!MESSAGE:"='! CALL :PRINT "!MESSAGE!" )
我遇到的问题是,当我得到关于模板,比较运算符,排他或运算符,或位移运算符的错误。 在这些情况下,%% A中的错误string包含引号和大于/小于符号。 例如:
error: yada yada TemplateClass<> "Some Message" error: yada yada operator <<() 'Some Message' error: yada yada 'operator ^()' "Some Message"
我的问题是这样的:是否有可能在for循环中捕获包含双引号,单引号和小于/大于字符的整个消息? 我曾经尝试过:
:: Fails when %%A contains a quote SET "MESSAGE=%%A" :: Fails when %%A contains a quote SET MESSAGE="%%A" :: Fails when %%A contains a greater-than symbol SET MESSAGE=%%A
有没有什么办法可以捕获另一个variables中的%% A,所以我可以在batch file的其他地方使用这个variables? 谢谢。
将值赋给变量的“正确”方法是set "message=%%a"
。 但是,在调用print函数时,不要传递值,而是传递变量名称(引用),并在函数内部取消引用该变量。
而且,在你的print函数中,当访问变量的内容时,使用!var!
避免将特殊字符视为命令的一部分而不是部分文本。
一个小样本(dbenham样式)
@echo off setlocal enableextensions for /f "tokens=* delims=:" %%f in ('findstr /b /c:":::" "%~f0" ') do ( set "line=%%f" call :print line ) exit /b :print variable setlocal enabledelayedexpansion echo( Parameter : %~1 echo( Dereferenced value : !%~1! set "var=!%~1!" echo( Variable with the value : !var! echo. rem If var contains special characters the following line fails rem echo( Variable with the value : %var% endlocal goto :EOF exit /b :::This is a plain line :::This line has special characters !"'#$%&/()=?: :::This line has more special characters << " >> :::"This is a double quoted line" :::'This is a single quoted line'