搜索,尝试和哭泣我开发了一个代码:
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"手动需要文件夹。
答案 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。