より長くないファイルのために動作します次のスクリプトでは、2つのネストされたfor /F
ループを使用しています。内側のループはサブルーチン:SUB
に配置されています。グローバルインデックス変数$INDEX
は、外側ループのインターラクションをカウントするため、関連ファイルの処理された行の数を反映します。このインデックスは、スキップする関連テキストファイル(skip
オプション、for /F
のオプション)の行数を定義するために内部ループに使用されます。ループは最初の反復時に残されます。したがって、1つの行、つまり現在外側ループから読み取られたものと同じインデックスを持つ行だけが読み込まれます。これは、より複雑で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