0

我需要一个批处理文件,该文件将检查指定文件夹中具有 .txt 扩展名的文件中包含的行数,并删除任何少于 3 行的文件。

到目前为止,我的代码打印了指定文件夹中每个 .txt 文件中的总行数。问题是我不知道如何将该信息捕获到变量中:

@echo off
for %%A in ("D:\test\*.txt") do (
    findstr /R /N "^" %%A | find /C ":"
)

我尝试修改此代码以执行我需要的操作失败了:

@echo off
set count=0
for %%A in ("D:\test\*.txt") do (
    set /a count=findstr /R /N "^" %%A | find /C ":"
    if %count% LSS 3 del %%A
)

请有人对此问题提供一些建议或解决方案。

任何帮助将不胜感激。

4

5 回答 5

1

只需获取 for 变量中的值并对其进行测试

rem Enumerate the files
for %%f in (*.txt) do (
    rem Count lines in file not containing some inexistent text, 
    rem so we get the number of lines in file
    for /f %%c in ('type "%%f" ^| find /v /c "TeXtNoTiNfIlEs"') do (
        rem if count is less than 3, delete file
        if %%c lss 3 del %%f
    )
)
于 2013-10-15T06:32:29.610 回答
1

这在这里有效:

@echo off
for %%a in ("d:\test\*.txt") do for /f %%b in ('find /c /v "" ^< "%%a" ') do if %%b LSS 3 del "%%a"
于 2013-10-15T08:36:58.560 回答
1

您可以使用 FIND /C 快速计算所有 *.txt 文件中的行数,并将结果通过管道传递给 FINDSTR 以仅过滤掉以 0、1 或 2 结尾的行。最后一个比较棘手的位是使用一对 FOR /F 循环来解析结果以仅给出文件名列表,去除前导----------以及冒号后的所有内容。

@echo off
pushd "D:\test\"
for /f "tokens=1*" %%A in (
  'find /c /v "" *.txt^|findstr /rc:" [012]$"'
) do for /f "delims=:" %%F in ("%%B") do del "%%F"
popd
于 2013-10-15T13:05:32.707 回答
0

试试这个(它也会在子文件夹中这样做):

@echo off
setlocal enabledelayedexpansion
for /r "D:\test\" %%a in (*.txt) do (
set count=0
for /f "usebackq" %%b in ("%%~a") do (
set count+=1
)
if !count! lss 3 (
del "%%a"
Echo Deleting %%a
))

我认为这应该可行,(如果没有一行以 开头;)。

希望这有帮助,

莫娜

于 2013-10-14T23:07:30.537 回答
0
for /r "D:\test" %%a in (*.txt) do (
    set "smallfile=true"
    for /f "delims=:" %%b in ('findstr /n "^" "%%~a"') do if %%b geq 3 set "smallfile="
    if defined smallfile del "%%~a"
)
于 2013-10-15T00:05:14.150 回答