【问题标题】:How to merge two text files using batch script?如何使用批处理脚本合并两个文本文件?
【发布时间】:2013-01-28 11:51:06
【问题描述】:

我有两个文本文件,分别是 A.txt 和 B.txt,内容如下:

A.txt

value_a1,value_a2
value_b
value_c
value_d
value_e1,value_e2

B.txt

12,14
13
15
16
23,34

我想要输出文件 C.txt 为

"value_a1","12","value_a2","14"
"value_b","13"
"value_c","15"
"value_d,"16"
"value_e1,"23","value_e2","34"

由于我是批处理脚本的新手,请指导我。

【问题讨论】:

  • 不要将批处理文件用于此类内容。它会让你想把头发扯下来。如果这需要在没有第三方软件的 Windows 机器上运行,请尝试使用 VBScript

标签: batch-file filemerge


【解决方案1】:

以下代码将起作用:

    @Echo off

    echo. >>d.txt
    type b.txt >>d.txt

    set dec=1
    For /F "usebackq tokens=1,* delims=, " %%a in ("a.txt") do call :File1 %%a %%b
    set dec1=0
    del d.txt

    exit /b

    :File1
    SET str1=%~1
    SET str2=%~2
    SET Count=1
    For /F "usebackq tokens=1,* skip=%dec% delims=," %%A in ("d.txt") do call :File2   %%A %%B
    set /a dec=%dec%+1

    exit /b

    :File2
    SET str3=%~1
    SET str4="%~2"
    IF %Count% EQU 1 (
    IF %str4%=="" (
    echo "%str1%","%str3%" >>c.txt
    set /a Count=%Count%+1
    ) ELSE (
    echo "%str1%","%str3%","%str2%",%str4% >>c.txt
    set /a Count=%Count%+1) 
    )
    exit /b 

【讨论】:

    【解决方案2】:

    这个解决方案有很多限制,但它是尽可能简单的纯原生批处理解决方案。它对于批处理解决方案也相当有效。

    @echo off
    setlocal enableDelayedExpansion
    <b.txt >c.txt (
      for /f delims^=^ eol^= %%L in (a.txt) do (
        set "ln="
        set /p "ln="
        set "out="
        for %%A in (%%L) do (
          for /f "tokens=1* delims=," %%a in ("!ln!") do (
            set "out=!out!,"%%A","%%a""
            set "ln=%%b"
          )
          echo !out:~1!
        )
      )
    )
    

    限制:

    • A.TXT 不能包含 *?!
    • 如果 A.TXT 值包含任何&lt;space&gt; &lt;tab&gt; , ; =,则必须引用它们
    • A.TXT 最大行长度约为 8191 字节
    • B.TXT 不能包含!
    • B.TXT 值不能包含,, 是严格的分隔符)
    • B.TXT 最大行长度为 1021 字节
    • B.TXT 行必须使用 Windows 样式终止符(回车/换行),而不是 Unix 样式(换行)

    有些限制可以很容易地克服。其他人则需要更多的努力,以至于变得完全不切实际。

    【讨论】:

    • 有点令人兴奋,但我想我已经解决了。您没有附上第一个 for 的选项,而是转义了一些字符。这是故意的还是只是为了证明它可以双向发挥作用?
    • @AndriyM - 故意的。这是禁用 DELIMS 和 EOL(均设置为空字符串)的最简单语法。
    猜你喜欢
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多