我想知道是否有一种简单的方法可以检查目录中包含超过一定字符数的行的文件。例如,我有一个包含 10000 个文件的目录,我想查看哪些文件至少有一行超过 1000 个字符。是否可以通过批处理脚本进行检查?谢谢你。
这适用于 Windows 7 Enterprise,64 位,Service Pack 1
我想知道是否有一种简单的方法可以检查目录中包含超过一定字符数的行的文件。例如,我有一个包含 10000 个文件的目录,我想查看哪些文件至少有一行超过 1000 个字符。是否可以通过批处理脚本进行检查?谢谢你。
这适用于 Windows 7 Enterprise,64 位,Service Pack 1
最简单和最快的方法是使用 GnuWin32 中的grep
二进制文件。我相信这种语法会起作用:
grep -Pl ".{1000}" *
这将对包含 1000 个字符的任何行执行 perl 语法正则表达式搜索,*
如果找到匹配项,则输出文件名。
使用纯批处理脚本绝对有可能完成您所要求的任务,但是for
循环遍历 10,000 个文件,每个文件都知道有多少行,这将需要永远和一天的时间。
好的,Pickle 教授,这是您的批处理文件。我使用可变子字符串提取来提高速度。此外,如果遇到包含 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
)
纯批次:
@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 更改为您想要的搜索模式。
编辑:小改进(^^
)。
我用临时文件找到了一个更快的解决方案:
@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 的转义。