2014-12-06 46 views
-1

我在查找合併2個文本文件而不創建換行符的代碼。如何合併2個文本文件中的行而不在批處理命令中創建換行符

當前我正在使用此代碼。

@echo off 
setlocal enabledelayedexpansion 
set fd1=\folderpath1\ 
set fd2=\folderpath2\ 
set MrgFiles=\outputfolder\ 
pushd "%fd1%" 
for /f "tokens=1* delims=" %%a in ('dir /b /a-d "!fd1!"') do (
    if exist "!fd2!\%%a" (
     type "%%~fa">"!MrgFiles!\%%a" 
     echo.>>"!MrgFiles!\%%a" 
     type "!fd2!\%%a">>"!MrgFiles!\%%a" 
    ) 
) 
popd 

我的設置是目前這樣的

Folder 1 has 100 files in it. 
Each file has 1 line 
Example: 
Line 1 

Folder 2 has 100 files in it. 
Each file has 1 line. 
Example: 
Line a 

上面的代碼管理的文件很好地在一起,並輸出合併,對新換行的第二行。

但我需要新合併的行在一行。

我試圖刪除代碼echo.>>"!MrgFiles!\%%a" 但它然後合併兩行沒有空間。

我怎樣才能批量合併入行

line 1 line a 
line 2 line b 

對不起,我不好解釋,我覺得代碼是幾乎完成,但我只是不能想出一個辦法線路合併成一條線。

請幫幫我!

謝謝

回答

0

將文本文件讀入變量有一個簡單的技巧。

@echo off 
setlocal 

set /p "text1="<file1.txt 
set /p "text2="<file2.txt 
>merged.txt echo(%text1% %text2% 

這會採取FILE1.TXT和FILE2.TXT的內容,將它們連接在一起在一行,並轉儲級聯線merged.txt。

set /p命令用於偵聽stdin上的輸入。 <將文件的內容轉儲到標準輸入,等待set /p。有關批處理文件重定向的更多信息,請參閱this page


編輯:好吧,顯然你的線條是太大,該方法的工作。這是令人驚訝的,因爲我真的認爲批處理變量可以處理超過2500個字符。我會建議set /P "= "<NUL回顯一個沒有換行符的空格,但set /P拒絕傳遞一個空格(或一個製表符),除非我添加非空白字符。我嘗試使用dbenham's second method來捕獲退格字符到一個變量,並將其回顯給文本文件,但這也不起作用。長話短說,我放棄了,決定用一個榴彈炮來擊打這隻蒼蠅。所以。不打算成爲一個免費的編碼服務,但爆炸,我拒絕被你的問題擊敗。這是一個混合批處理/ JScript腳本,可以實現您想要的功能。用.bat擴展名保存。

@if (@[email protected]) @end /* begin JScript multiline comment 

:: batch portion 

@echo off 
setlocal 
set "fd1=\folderpath1\" 
set "fd2=\folderpath2\" 
set "MrgFiles=\outputfolder\" 
pushd "%fd1%" 

for %%a in (*) do (
    if exist "%fd2%\%%~a" (
     cscript /nologo /e:Jscript "%~f0" "%%~a" "%fd2%\%%~a" "%MrgFiles%\%%~a" 
    ) 
) 

popd 

goto :EOF 

:: end batch portion/begin JScript hybrid */ 
var fso = new ActiveXObject('scripting.filesystemobject'), 
    file1 = fso.OpenTextFile(WSH.Arguments(0), 1), 
    file2 = fso.OpenTextFile(WSH.Arguments(1), 1), 
    merge = fso.CreateTextFile(WSH.Arguments(2), true); 

merge.Write(file1.ReadLine() + ' ' + file2.ReadLine()); 
file1.Close(); 
file2.Close(); 
merge.Close(); 
+0

我該如何將您的代碼整合到我擁有的?從我所看到的,您的代碼需要手動輸入文件名。我在這兩個文件夾中的文件已經是格式file001.txt,file002.txt等 – einstein 2014-12-06 05:02:45

+0

@einstein請參閱編輯。歡迎來到S.O.如果您發現我的答案有用,請考慮將其標記爲已接受。 [見本頁](http://meta.stackexchange.com/q/5234/275822)爲什麼這是重要的解釋。 – rojo 2014-12-06 05:24:29

+0

我試過你的代碼,它將行與空格合併在一起,但它以某種方式將我的部分文本去掉。我的文本文件包含每行2500個字符。我發佈在頂部的代碼管理合並整個文本。但我們正在接近。無論如何改變我現有的代碼添加一個空間或做一個退格? – einstein 2014-12-06 05:31:49

相關問題