Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows cmd中的If命令_Windows_Batch File - Fatal编程技术网

Windows cmd中的If命令

Windows cmd中的If命令,windows,batch-file,Windows,Batch File,我在cmd工作,我需要一些帮助。我想修改此代码(正在运行): 因此,这段代码有3个参数(1.path、2.extension和3.string),只搜索包含该字符串的文件。搜索在作为参数发送的目录和所有子文件夹中进行。仅当文件包含作为参数发送的字符串时,此代码才会显示每个文件的行数。 现在我想修改这段代码,这样我可以发送第四个参数,这是一个数字,我希望它(显然是回显的!)只有当文件中的行数大于作为参数发送的数时。然而,我下面的代码不起作用(我已经尝试了许多解决方案,包括([“'等),但我无法让它

我在cmd工作,我需要一些帮助。我想修改此代码(正在运行):

因此,这段代码有3个参数(1.path、2.extension和3.string),只搜索包含该字符串的文件。搜索在作为参数发送的目录和所有子文件夹中进行。仅当文件包含作为参数发送的字符串时,此代码才会显示每个文件的行数。 现在我想修改这段代码,这样我可以发送第四个参数,这是一个数字,我希望它(显然是回显的!)只有当文件中的行数大于作为参数发送的数时。然而,我下面的代码不起作用(我已经尝试了许多解决方案,包括([“'等),但我无法让它工作

 @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!
) 

你能帮我吗?:)

给你,看起来有点不同

这包括防止
Dir
命令读取目录、系统文件和重新分析点的过滤器:

@ECHO关闭
对于/F“DELIMS=“%%A IN('DIR/B/S/A:-D-S-L”%~1*%2“)DO(
对于/F“TOKENS=3 DELIMS=:”%%B IN('FIND/I/C“%~3”“%%A“)DO(
如果%%B全球技术法规%4(
回显文件%%A有超过%4行与字符串%3匹配,它有%%B。
)
)
)

这使用了
FindStr
,如您的示例所示,但速度稍慢:

@ECHO关闭
对于/F“DELIMS=“%%A IN('FINDSTR/S/M/I/C:“%3”“%~1*%2”)DO(
对于/F“TOKENS=3 DELIMS=:”%%B IN('FIND/I/C“%~3”“%%A“)DO(
如果%%B全球技术法规%4(
回显文件%%A有超过%4行与字符串%3匹配,它有%%B。
)
)
)

(请记住,脚本设计用于接受输入参数的特定格式和顺序).

看起来你想做的事情和我昨天回答的一样。他们看起来和我几乎一样。这意味着你们两个是同一个班的学生。那肯定是我的一个同学。我很惊讶,当我搜索答案时,他的问题没有提出来。但是抄写这篇文章会作弊,所以我会尝试另一个解决方案,因为我们的代码略有不同:)您至少可以告诉我,我可以在IF语句中传递command1 | command2吗?第二个findstr中的/s参数是多余的。为什么不使用单个
findstr/s/N
并使用
for/f“tokens=1,2 delims=:“
并在环境中存储每个文件的最高行号?@Jupiter,不要复制你的同学的答案,复制我的,我将在这里复制几行而不是一行。谢谢!我仍在尝试,我感觉我很接近:)
 @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!
)