2016-12-01 69 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 
相关问题