以下脚本使用两个嵌套的for /F
循环,其中内部循环放置在子程序:SUB
中。全局索引变量$INDEX
计算外部循环的interations,因此它反映了相关文件的处理行数。该索引用于内循环以定义要跳过的相关文本文件的行数(skip
选项for /F
);循环会在第一次迭代时留下,因此只读取一行,即与当前从外部循环读取的索引相同的索引。这是更复杂,比Squashman的method慢,但它不会混淆了不同的方法来读取文件(for /F
和输入重定向):
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set /A "$INDEX=0"
for /F usebackq^ delims^=^ eol^= %%J in ("barcode.txt") do (
set "LINE=%%J"
set /A "$INDEX+=1"
call :SUB TEXT "destination.txt"
setlocal EnableDelayedExpansion
echo(!LINE! !TEXT!
endlocal
)
endlocal
exit /B
:SUB rtn_line_text val_file_path
set /A "SKIP=$INDEX-1"
if %SKIP% LEQ 0 (set "SKIP=") else (set "SKIP=skip^=%SKIP%")
for /F usebackq^ %SKIP%^ delims^=^ eol^= %%I in ("%~2") do (
set "%~1=%%I"
exit /B
)
exit /B
重定向(>
)的批处理文件的输出到一个文本文件来获得所需的组合文件。
以下是对这两个文件使用输入重定向(<
)的替代方法。如果两个文件的行是空的,则goto
环断裂,因此,脚本终止:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
4< "barcode.txt" 3< "destination.txt" call :SUB
endlocal
exit /B
:SUB
set "LINE1=" & set "LINE2="
<&4 set /P "LINE1="
<&3 set /P "LINE2="
if not defined LINE1 if not defined LINE2 exit /B
setlocal EnableDelayedExpansion
echo(!LINE1! !LINE2!
endlocal
goto :SUB
[重复](http://stackoverflow.com/q/37079030/2152082)与2层不同的溶液的方法 – Stephan