空格上的批处理脚本分隔符?

时间:2010-11-17 23:57:12

标签: string batch-file

我正在使用以下代码;改变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(

我怎么能得到完整的字符串?

2 个答案:

答案 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才能保留“!”和“^”字符