从Windows中的目录和子文件夹中的* .txt文件中删除所有空行

时间:2014-10-22 15:24:16

标签: windows batch-file cmd

搜索,尝试和哭泣我开发了一个代码:

For /R %%G IN (*.txt) do for /f "delims=" %%a in ('more +1 %%G ^| find /v ""') do (set line=%%~a echo !line!) > new\%%G

有人知道为什么它会永远循环吗?

预期要做的是删除它在所有子目录中找到的每个* .txt文件中的空行,并将新文件放在" new"夹。我可以提供所有" new"手动需要文件夹。

1 个答案:

答案 0 :(得分:0)

我不确定这会导致它永远循环,但是您正在写一个与您正在读取的同一层次结构中的新文件夹。所以它会处理你刚写的文件。你需要一个过滤器来防止这种情况发生。

另外,我认为您的输出文件名需要%%~nxG来获取文件名和扩展名,而不需要路径。

有一种更简单的方法可以删除空白行。 findstr . file将删除空行。 findstr /rc:"[^ ]将删除空行和仅包含空格的行。

@echo off
setlocal
set "outFolder=new"
for %%F in ("%outfolder%\.") for /r %%G in (*.txt) do if "%%~dpG" neq "%%~fF\" findstr /rc:"[^ ]" "%%G" >"%%~fF\%%~nxG"

但最简单的方法就是确保输出文件夹与源层次结构不同

for /r %%G in (*.txt) do findstr /rc:"[^ ]" "%%G" >"\distinctPath\%%~nxG"

<强>更新

可能导致脚本挂起的一件事是,如果文件超过64k行,管道MORE将挂起。但我不明白为什么你首先使用MORE。