Batch file 如何使用批处理脚本合并两个文本文件?

Batch file 如何使用批处理脚本合并两个文本文件?,batch-file,filemerge,Batch File,Filemerge,我有两个文本文件A.txt和B.txt,内容如下: A.txt B.txt 我希望输出文件C.txt为 "value_a1","12","value_a2","14" "value_b","13" "value_c","15" "value_d,"16" "value_e1,"23","value_e2","34" 由于我不熟悉批处理脚本,请指导我完成此过程。以下代码将起作用: @Echo off echo. >>d.txt type b.txt >

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

A.txt

B.txt

我希望输出文件C.txt为

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

由于我不熟悉批处理脚本,请指导我完成此过程。

以下代码将起作用:

    @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 

以下代码将起作用:

    @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 

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

@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值包含以下任何值,则必须引用它们:= A.TXT的最大行长度约为8191字节 B.TXT不能包含! B.TXT值不能包含,严格来说是分隔符 B.TXT最大行长度为1021字节 B.TXT行必须使用Windows样式的终止符回车/换行符,而不是Unix样式的换行符
有些限制可以相当容易地克服。其他解决方案需要付出更多的努力,甚至变得完全不切实际。

此解决方案有许多限制,但对于纯本机批处理,这是一个尽可能简单的解决方案。对于批处理解决方案,它也是相当有效的

@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值包含以下任何值,则必须引用它们:= A.TXT的最大行长度约为8191字节 B.TXT不能包含! B.TXT值不能包含,严格来说是分隔符 B.TXT最大行长度为1021字节 B.TXT行必须使用Windows样式的终止符回车/换行符,而不是Unix样式的换行符
有些限制可以相当容易地克服。其他的则需要更多的努力,甚至变得完全不切实际。

不要将批处理文件用于此类内容。这会让你想把头发扯下来。如果需要在没有第三方软件的windows计算机上运行,请尝试VBScript,而不要使用批处理文件处理此类内容。这会让你想把头发扯下来。如果这需要在没有第三方软件的windows机器上运行,请尝试VBScript,而不是有点激动人心,但我想我已经解决了。您没有将第一个for的选项括起来,而是转义了一些字符。这是故意的还是只是证明它可以双向运行?@AndriyM-故意的。这是禁用DELIMS和EOL的最简单语法,它们都被设置为空字符串。有点令人兴奋,但我想我已经解决了。您没有将第一个for的选项括起来,而是转义了一些字符。这是故意的还是只是证明它可以双向运行?@AndriyM-故意的。这是禁用DELIMS和EOL的最简单语法,它们都设置为空字符串。