首页 > 解决方案 > 在cmd中将结果从FIND发送到IF

问题描述

在因没有以正确的方式提出问题而受到批评后,我再次以我认为更好的方式返回。我正在尝试解决家庭作业问题,我必须编写一个批处理文件并且我被卡住了。

在 CMD 中调用此批处理文件时,它会接收 4 个参数:

此批处理文件的目的是查找本地目录中所有扩展名为 (2) 的文件 X 以及 (1) 接收到的所有子目录,其中包含超过 (4) 行且包含子字符串 (3) 的行,然后在控制台中写入句子:

“文件 X 有超过 (4) 个留置权,更精确的是 Y,它有子字符串 (3)”。其中 X 是满足这些条件的文件的完整路径,Y 是找到子字符串的确切行数。

控制台中的输入应该是这样的: myfile.bat C:\Users\PC\Desktop\ txt ab 3

我解决这个问题的尝试是这样的:

@echo off
for %%a in ('dir /s %1*.%2') do (
    for /f "delims= " %%G in ('find /c "%3" ^<%%a') do (
        set linecount=%%G
        if %linecount% gtr %4 (
            echo File %%a has more than %4 lines, more precisley %linecount% which have substring %3
        )
    )
)

希望这次我做的部分正确。

标签: batch-filecmd

解决方案


根据您迄今为止的问题参数,只是为了它,这是一个单行批处理文件解决方案,(测试非常有限)

@For /F "Delims=" %%A In ('Dir/B/S/A-D-S-L "%~1*.%2"') Do @For /F "Tokens=3Delims=:" %%B In ('Find /I /C "%~3" "%%A"') Do @If %%B Gtr %4 Echo File %%A has more than %4 lines, more precisley%%B, which have substring %3

这个使用Where命令,(我更喜欢它,因为它不适用于标记为目录名称的尾随反斜杠)

@For /F "Delims=" %%A In ('Where/R "%~1" *.%2') Do @For /F "Tokens=3Delims=:" %%B In ('Find /I /C "%~3" "%%A"') Do @If %%B Gtr %4 Echo File %%A has more than %4 lines, more precisley%%B, which have substring %3

推荐阅读