我在cmd工作,我需要一些帮助。我想修改这段代码(正在运行):
@echo off
for /f %%a in ('findstr /s /m %3 "%1*.%2"') do (
findstr /S /R /N "^" "%%a" | find /C ":"
)
因此,此代码有3个参数(1.path,2.extension和3. string),只搜索包含该字符串的文件。搜索在作为参数发送的目录和所有子文件夹中进行。此代码将显示每个文件只有在文件包含作为参数发送的字符串时才有多少行。 现在我想修改这个代码的方式,我可以发送第四个参数,这是一个数字,我希望它(显然回应YES!)只有当文件中的行数大于作为参数发送的数字。但是,我在下面的代码不起作用(我尝试过很多解决方案,包括(["'等等),但我无法让它工作。
@echo off
for /f %%a in ('findstr /s /m %3 "%1*.%2"') do (
if findstr /S /R /N "^" "%%a" | find /C ":" gtr %4 echo YES!
)
你能帮帮我吗? :)
答案 0 :(得分:1)
你走了,看起来有点不同。
这包括阻止Dir
命令读取目录,系统文件和重新分析点的过滤器:
@ECHO OFF
FOR /F "DELIMS=" %%A IN ('DIR /B /S /A:-D-S-L "%~1*.%2"') DO (
FOR /F "TOKENS=3 DELIMS=:" %%B IN ('FIND /I /C "%~3" "%%A"') DO (
IF %%B GTR %4 (
ECHO File %%A has more than %4 lines matching the string %3, it has%%B.
)
)
)
这在您的示例中使用FindStr
,但速度稍慢:
@ECHO OFF
FOR /F "DELIMS=" %%A IN ('FINDSTR /S /M /I /C:"%~3" "%~1*.%2"') DO (
FOR /F "TOKENS=3 DELIMS=:" %%B IN ('FIND /I /C "%~3" "%%A"') DO (
IF %%B GTR %4 (
ECHO File %%A has more than %4 lines matching the string %3, it has%%B.
)
)
)
(请记住,该脚本旨在接受特定格式和输入参数的顺序)。