我正在使用以下代码;改变Cmakefile中的内容:
for /f %%j in (CMakeLists.txt) do (
if "%%j"=="Extensions_AntTweakBar" (
echo #Extensions_AntTweakBar >> temp.tmp
) else (
if "%%j"=="Extensions_Inspection" (
echo #Extensions_Inspection >> temp.tmp
) else (
if "%%j"=="Extensions_InspectionBar" (
echo #Extensions_InspectionBar >> temp.tmp
) else (
echo %%j >> temp.tmp
)
)
)
)
它似乎工作,也就是说,它确实改变了选定的行,但是,如果在一行上有一个空格,它只会获得该行直到空格出现。 例如:
SET( PROJECT_NAME "MyProject")
只获取字符串:
SET(
我怎么能得到完整的字符串?
答案 0 :(得分:1)
默认分隔符是空格和制表符。如果覆盖默认分隔符,则应读取整个行,其中包含空格
for /f "delims=@" %%j in (CMakeLists.txt) do
我将它设置为@,它将空格作为分隔符忽略并读取整行。您可以将其设置为您知道不在文本文件中的唯一字符。
答案 1 :(得分:1)
在您的代码中,您在每行附加一个空格。
echo %%j[space]>> temp.tmp
在这里你可以删除它(仅适用于%% j),但通常最好将重定向设置为前缀,例如
>> temp.tmp echo %%j
使用正常变量后缀变体可能会失败
set var=hallo2
echo %var%>temp.tmp
扩展为回显hallo2> temp.tmp或echo hallo 2> temp.tmp,所以只有stderr会重定向。 接下来的问题是关键字 ON OFF /?,如果您的文件包含这样的字词,则会产生意外结果,因为 echo 会解释这些字词。
[编辑:]要解决此问题,您可以使用 echo(
>>temp.tmp echo(%%j
你可以得到空行(或只有空格的行),你只需要为它们添加前缀。
for /f "delims=" %%a in ('findstr /n ".*" qut.bat') do (
set var=%%a
setlocal EnableDelayedExpansion
echo(!var:*:=!
endlocal
)
需要切换DelayedExpansion才能保留“!”和“^”字符