Я не уверен, что это заставит его зацикливаться навсегда, но вы пишете в NEW папку, которая находится в той же иерархии, которую вы читаете. Таким образом, он будет обрабатывать файлы, которые вы только что написали. Для этого вам понадобится фильтр.
Кроме того, я думаю, что для вашего имени выходного файла требуется %%~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"
UPDATE
Одна вещи, которая может привести к вашему сценарию, чтобы повесить это что в канале MORE будет зависать, если файл имеет более 64k строк. Но я не понимаю, почему вы используете MORE в первую очередь.
Знаете ли вы, что 'more + 1' удаляет первую строку каждого файла? (возможно, ваше намерение) – Stephan
Я абсолютно не знаком с этой темой. Я этого не знал. Спасибо. – transfer1992