不跳过批处理文件中的空行

时间:2017-11-02 04:35:04

标签: batch-file

我正在尝试复制没有第1行的文件。 但我似乎无法正确复制它的内容。

这是我尝试的方式:

for /f "tokens=* skip=1" %%i in (input.txt) do (
    echo %%i >> "output.txt"
)

当我的 input.txt 有这个:

test1

1. test item1

2. test item2

3. test item3

它给了我这个:

1. test item1    
2. test item2
3. test item3

预期输出:

1. test item1

2. test item2

3. test item3

我如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q47067655.txt"
SET "outfile=%destdir%\outfile.txt"

(FOR /f "tokens=1*skip=1delims=:" %%a IN ('findstr /n /r ".*" "%filename1%"') DO ECHO(%%b)>"%outfile%1"
(FOR /f "tokens=1*skip=1delims=]" %%a IN ('find /n /v "" ^<"%filename1%"') DO ECHO(%%b)>"%outfile%2"
(more +1 "%filename1%">"%outfile%3")

GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。 您需要更改sourcedirdestdir的设置以适合您的具体情况。

我使用了一个名为q47067655.txt的文件,其中包含我的测试数据。

生成定义为%outfile%*

的文件

for /f将跳过空行,因此请通过编号确保这些行不为空。

请注意,echo(%%a会生成一个空行%%a

的空行

您的示例输出省略了skip ped行与下一行之间的空白行。

答案 1 :(得分:1)

使用for /f无法执行此操作,for /?的文档非常坚定:

  

会跳过空行。

对于简单这样的需求,它可以通过Windows more程序来满足,该程序可以从任意行开始,如果文件是“#1”,则不会实际归档该文件。重定向(无论如何都是一定的大小)。这意味着您的整个脚本可以用一个命令替换:

c:\users\paxdiablo> more +2 input.txt >output.txt
c:\users\paxdiablo> type output.txt
1. test item1

2. test item2

3. test item3

对于更多复杂的任务,或者如果您的文件大于more无需分页即可处理的文件,您可能应该停止使用(坦率地说是脑死亡的)较旧的Windows工具并切换到PowerShell。

或者为自己设置一些适合Windows的文档处理工具,例如sedawk(请参阅GnuWin32),之后您可以执行类似的操作(对于您的情况,尽管脚本现在可以任意复杂):

c:\users\paxdiablo> awk "NR>2{print}" input.txt >output.txt