2011-08-26 96 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

相关问题