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

如何将文本文件的内容加载到批处理文件变量中?

  •  31
  • Keng  · 技术社区  · 16 年前

    我需要能够加载一个文本文件的全部内容,并将其加载到一个变量中以便进一步处理。

    我该怎么做?


    这就是我所做的,多亏了罗马奥达斯基的回答。

    SetLocal EnableDelayedExpansion
    set content=
    for /F "delims=" %%i in (test.txt) do set content=!content! %%i
    
    echo %content%
    EndLocal
    
    6 回复  |  直到 9 年前
        1
  •  14
  •   Roman Odaisky    16 年前

    使用 for 沿着以下几条线:

    set content=
    for /f "delims=" %%i in ('filename') do set content=%content% %%i
    

    也许你要做 setlocal enabledelayedexpansion 和/或使用 !content! 而不是 %content% . 我可以测试,因为我附近没有任何MS Windows(我也希望你也一样:-)。

    我所知道的最佳批处理文件black magic reference位于 http://www.rsdn.ru/article/winshell/batanyca.xml . 如果你不懂俄语,你仍然可以利用提供的代码片段。

        2
  •  50
  •   Will Bickford    11 年前

    如果您的set命令支持/p开关,那么您可以用这种方式来管道输入。

    set /p VAR1=<test.txt
    

    设置/?找到“/P”

    /P开关允许您将变量的值设置为 用户输入。显示之前指定的promptstring 读取输入行。promptstring可以为空。

    这有一个额外的好处,就是可以处理未注册的文件类型(接受的答案没有)。

        3
  •  2
  •   Curro    16 年前

    你可以使用:

    set content=
    for /f "delims=" %%i in ('type text.txt') do set content=!content! %%i
    
        4
  •  2
  •   Flexo - Save the data dump sunny moon    13 年前

    您能定义进一步处理吗?

    您可以使用for循环来实现这一点,但是要将CR/LF插入到环境变量中并不是一个简单的方法,所以您可以将所有内容都放在一行中。(根据您需要做的工作,您可能可以解决此问题。)

    通过这种方式,您也只能使用少于8K个文本文件。(不能创建大于8K左右的单个env var。)

    比尔关于for循环的建议可能正是你需要的。您一次处理一行文件:

    (使用) %i 在命令行 %%i 在批处理文件中)

    for /f "tokens=1 delims=" %%i in (file.txt) do echo %%i
    

    更先进的:

    for /f "tokens=1 delims=" %%i in (file.txt) do call :part2 %%i
    goto :fin
    
    :part2
    echo %1
    ::do further processing here
    goto :eof
    
    :fin
    
        5
  •  0
  •   pdavis    16 年前

    创建一个名为“setfile.bat”的文件,其中包含以下行 无回车 最后…

    set FileContents=
    

    然后在批处理文件中执行类似的操作…

       @echo off
       copy SetFile.bat + %1 $tmp$.bat > nul
       call $tmp$.bat
       del $tmp$.bat
    

    %1是输入文件的名称,%fileContents%将包含调用后输入文件的内容。但是,这只适用于一行文件(即不包含回车的文件)。如果需要,可以在调用%tmp%.bat之前从文件中删除/替换回车。

        6
  •  -1
  •   clichok    10 年前
    for /f "delims=" %%i in (count.txt) do set c=%%i
    echo %c%
    pause