2011-08-26 37 views
-2

我想編寫一個簡單的Windows批處理文件,從標準輸入讀取的文本文件, 並寫到標準輸出相同的內容,但作爲一個長行,有點像你 得到什麼,如果你換成每節車廂通過空白返回輸入。將多行文本文件轉換爲一行長文本文件的批處理文件?

任何人都知道如何做到這一點?

+2

那你試試? – steenhulthin

+0

@steenhulthin - 我認爲,一個for語句循環直通輸入線將要走的路,但我不知道如何得到它的工作。下面的答案正是我想要的。 – anton

回答

1

您可以將所有線粘貼到一起,如果總大小小於8192個字符。
和回聲的結果與在端部只有一個CR/LF的新文件。

setlocal EnableDelayedExpansion 
set "text=" 
for/f "delims=" %%a in (multiLine.txt) do (
    set "text=!text!%%a" 
) 
>newFile.txt echo !text! 

你也可以使用set /p而不CR/LF輸出文本,但它不能處理在前面等號,也沒有空格。

編輯:第一個解決方案的工作原理,但空白行和感嘆號行有問題。

這是消除這兩個問題的解決方案。

@echo off 
setlocal EnableDelayedExpansion 
set file=multiLine.txt 

set "AllText=" 
for /F "tokens=2 delims=:" %%L in ('find /c /v "" %file%') do set /a "len=%%L" 

<%file% ( 
    for /L %%n in (1,1,!len!) DO (
     set "line=" 
     set /p "line=" 
     set "AllText=!AllText!!line!" 
    ) 
) 
>newFile.txt echo(!AllText! 
+0

謝謝你們兩位。這正是我正在尋找的。我是命令行的新手。對於陳述看起來非常有用,但需要花費一些努力去學習。謝謝。 – anton

+0

不對我工作。 – user198989

+0

@ user198989- _Doesnt對我沒有任何意義!你的電腦開着嗎?你有錯誤信息嗎?什麼是輸出? – jeb

1

如果你的文件不大,你可以把所有內容都塞進內存中。例如在VBScript

Set objFS = CreateObject("Scripting.FileSystemObject") 
strFile="c:\test\file" 
Set objFile=objFS.OpenTextFile(strFile) 
strData = objFile.ReadAll 
objFile.Close 
Wscript.Echo Replace(vbCrLf,"",strData) 
+0

我還不知道windows腳本的任何內容,但謝謝你的例子。 – anton

0

使用PowerShell:

(gc c:\file) -join '' 
+0

我不知道任何關於你的答案是什麼意思,但我被它吸引,於是我擡起頭來對PowerShell的幾件事情,這是我從來沒有聽說過(我用窗多年,但從未使用命令行或腳本或編程窗口)。它看起來非常有用和強大,現在我想我想了解一些關於PowerShell的知識。謝謝。 – anton

相關問題