代码之家  ›  专栏  ›  技术社区  ›  Skeen

空间上的批处理脚本特征线?

  •  0
  • Skeen  · 技术社区  · 15 年前

    我正在使用以下代码;更改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 回复  |  直到 15 年前
        1
  •  1
  •   jeb    15 年前

    在代码中,每行都要附加一个空格。

    echo %%j[space]>> temp.tmp
    

    在这里您可以删除它(仅适用于%%j),但通常最好将重定向设置为前缀,如

    >> temp.tmp echo %%j
    

    对于普通变量,postfix变量可能会失败

    set var=hallo2
    echo %var%>temp.tmp
    

    扩展到echo hallo2>temp.tmp或echo hallo2>temp.tmp,因此只有stderr会重定向。 下一个问题是关键字 开-关/? ,如果您的文件包含这样的单词,则会得到意外的结果,因为 回声 解释这些话。

    [编辑:]要解决此问题,可以使用 回声(

    >>temp.tmp echo(%%j
    

    你可以得到空行(或者只有空白的行),你只需要给它们加上前缀。

    for /f "delims=" %%a in ('findstr /n ".*" qut.bat') do (
        set var=%%a
        setlocal EnableDelayedExpansion
        echo(!var:*:=!
        endlocal
    )
    

    延迟扩展的切换对于保存“!”和“^”字符

        2
  •  1
  •   Eric K Yung    15 年前

    默认分隔符是空格和制表符。如果重写默认分隔符,则它应读取整行,并在两行之间加上空格

    for /f "delims=@" %%j in (CMakeLists.txt) do
    

    我将其设置为@,它忽略空格作为分隔符并读取整行。您可以将其设置为一个您知道不会出现在文本文件中的唯一字符。