2016-12-01 7 views
1

私のtxtファイルの最初の行と別のtxtファイルの最初の行を連結したいとします。 2番目と2番目のように。 次のコードはすべての行をすべての行に連結します。このコードでは、私はすべての4の組み合わせを取得し、私はあなたがループのネストされているので、これが起こる2.txtの最初の行と2番目の.txtの最初の行とをforループで連結する方法

for /f "delims=" %%c in (barcode.txt) do (
    for /f "delims=" %%d in (destination.txt) do (
     >>combine.txt echo %%c %%d 
    ) 
) 
+0

[重複](http://stackoverflow.com/q/37079030/2152082)2つの異なる解決方法 – Stephan

答えて

3

これは、その限界を持っているが、ラインの長さは1023

@echo off 
setlocal enabledelayedexpansion 

< file2.txt (FOR /F "delims=" %%G IN (file1.txt) DO (
    set /p file2= 
    echo %%G !file2! 
    ) 
) 
pause 
+0

と非常にスマートな答え –

+0

私は行の長さの制限は約8190バイト/文字だと思う。 WinXPでは1023の制限が当てはまりました... – aschipfl

+0

@Squashmanこれが動作します!どうもありがとうございました –

-1

のみ必要です。外側のループだけを使用してください。 2番目のファイルからn番目の行を返す関数またはルーチンを記述し、最初の行のforループで作成されたカウンタを使用して一致する行を取得します。私はバッチ構文に慣れていないんだが、これが一般的な考え方です:

rem initialize variable i = 1 
for /f "delims=" %%c in (barcode.txt) do (
    rem write f(index): returns the line number index from the second file 
    rem then concatenate the lines 
    rem and then increment i 
) 
2

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