我想知道是否有一种简单的方法来检查包含超过一定数量字符的行的目录中的文件。例如,我有一个包含10000个文件的目录,我想看看哪些文件至少有一行超过1000个字符。是否可以通过批处理脚本进行检查?谢谢。
适用于Windows 7企业版,64位Service Pack 1
答案 0 :(得分:4)
最简单快捷的方法是使用GnuWin32中的grep
binary。我相信这种语法可行:
grep -Pl ".{1000}" *
对于包含1000个字符的任何行,这将在*
中执行perl语法正则表达式搜索,如果找到匹配项,则输出文件名。
绝对有可能用纯批处理脚本来完成你所要求的,但循环遍历10,000个文件的for
循环,每个文件都知道多少行,这将花费一天又一天的时间。
好的Pickle教授,这是你的批处理文件。我使用variable substring extraction来提高速度。此外,如果遇到1000个字符的行,请立即移至下一个文件。我仍然认为grep
会更快更简单。 o°/
@echo off
setlocal enabledelayedexpansion
for %%a in (*) do (
call :look "%%a"
)
goto :EOF
:look
for /f "usebackq delims=" %%I in ("%~1") do (
set "line=%%I"
if "!line:~999,1!" neq "" echo %~1 && exit /b
)
答案 1 :(得分:2)
纯批次:
@echo off&setlocal enabledelayedexpansion
for %%a in (*.txt) do (
for /f "tokens=1-2delims=:" %%i in ('"cmd /c type "%%~a" ^&echo(|findstr /no ^^"') do (
set "pos1=!pos0!"&set "line1=!line0!"
set "pos0=%%j"&set "line0=%%i"
set /a length=!pos0!-!pos1!-2
if !length! gtr 1000 echo line: !line1! length: !length! in file: %%~a
))
将* .txt更改为您想要的搜索模式。
修改:小改进(^^
)。
答案 2 :(得分:0)
我找到了一个更快的临时文件解决方案:
@echo off&setlocal enabledelayedexpansion
set "tempfile=%temp%\%random%"
for %%a in (*.txt) do (
<"%%~a">"%tempfile%" more
echo(>>"%tempfile%"
for /f "tokens=1-2delims=:" %%i in ('^"^< "%tempfile%" findstr /no "^" ^"') do (
set "pos1=!pos0!"&set "line1=!line0!"
set "pos0=%%j"&set "line0=%%i"
set /a length=!pos0!-!pos1!-2
if !length! gtr 0 echo line: !line1! length: !length! in file: %%~a
))
del "%tempfile%" >nul 2>&1
编辑:改进了XP的转义。