以下腳本使用兩個嵌套的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