batch-file - 在cmd中将结果从FIND发送到IF
问题描述
在因没有以正确的方式提出问题而受到批评后,我再次以我认为更好的方式返回。我正在尝试解决家庭作业问题,我必须编写一个批处理文件并且我被卡住了。
在 CMD 中调用此批处理文件时,它会接收 4 个参数:
- (1) 以\结尾的某个目录的路径;例如:C:\Users\PC\Desktop\
- (2) 文件扩展名;示例:txt
- (3) 一些字符串;示例:“ab”
- (4) 整数;示例:3
此批处理文件的目的是查找本地目录中所有扩展名为 (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
)
)
)
希望这次我做的部分正确。
解决方案
根据您迄今为止的问题参数,只是为了它,这是一个单行批处理文件解决方案,(测试非常有限):
@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
推荐阅读
- node.js - 我将如何处理 node.js 博客上的管理员?
- javascript - 从 Excel 呈现数据时,时间格式以 JSON 中的数字形式出现
- javascript - 如何解决承诺?
- java - 如何解决这个未经检查的分配警告?
- pthreads - 如何更改使用 yocto 项目构建的 linux OS 中的线程优先级?
- java - 是否可以在 commandlinesArgs 中传递两个参数?
- java - 如何从 SonarQube 中的代码气味中排除文件?
- echarts - Echarts - 是否可以从最高到最高堆叠日期栏?
- azure-functions - Azure Functions Kudu 日志:保留、大小和成本?
- javascript - 如何在反应粘性表中实现样式或 sass / css 模块