2016-12-01 75 views
1

我想將我的txt文件的第一行與另一個txt文件的第一行連接起來。第二個與第二個等等。 現在我有下面的代碼,它連接每一行每行。有了這個代碼,我得到的所有4種組合,但我只需要2如何將.txt的第一行與第二個.txt中的第一行連接起來用於循環

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

這是因爲你在for循環嵌套。只使用外部循環。編寫一個函數或例程,從第二個文件返回第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

以下腳本使用兩個嵌套的for /F循環,其中內部循環放置在子程序:SUB中。全局索引變量$INDEX計算外部循環的interations,因此它反映了相關文件的處理行數。該索引用於內循環以定義要跳過的相關文本文件的行數(skip選項for /F);循環會在第一次迭代時留下,因此只讀取一行,即與當前從外部循環讀取的索引相同的索引。這是更復雜,比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 
相關問題