Batch file 如何使用批处理脚本合并两个文本文件?
我有两个文本文件A.txt和B.txt,内容如下: A.txt B.txt 我希望输出文件C.txt为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 >
"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的最简单语法,它们都设置为空字符串。