使用bat文件中的find命令搜索字符串

时间:2018-01-02 16:29:13

标签: batch-file

我正在尝试创建一个批处理文件,我可以使用该文件找到某些字符串计数然后显示它以进行监视,我的批处理文件适用于静态文件,但是当文件名是动态的时,就像文件名中的最新日期一样,它搜索所有文件而不是只搜索1个文件(应该是最新文件)

我的实际代码

@echo off
setlocal enabledelayedexpansion
set loc="D:\location\loc1\File Name*.dbg"
set val=
for /f "tokens=1* delims=," %%a in ('find /c /i "String name" %loc%') do (
setlocal enabledelayedexpansion
set val=%%~a
set val=!val:---------- D:\location\loc1\File Name*.dbg:=!
set val=!val: =!
echo. Thread,!val!
endlocal
)

此外,我想修剪输出的这部分

---------- D:\location\loc1\File Name*.dbg

3 个答案:

答案 0 :(得分:1)

有两种方法可以获取所创建文件的文件名"今天",

  • 例如" String name_0102.dbg"你应该计算"今天"的价值。并将它(或其子串)存储在变量中。然后,当您尝试匹配文件时,您应该同时使用" String name"和今天的价值一样(不要逐字逐句,这只是为了说明这个过程):

    'find /c /i %string_name%%today% %loc%'
    
  • 或者您需要在查找呼叫中对日期进行硬编码:

    'find /c /i "String name_0102" %loc%'
    

答案 1 :(得分:0)

以下是您的一个例子:

@Echo Off
Set "loc=D:\location\loc1"
Set "msk=File Name*.dbg"
CD /D "%loc%" 2>Nul || Exit /B
Set "MRF="
For /F "Delims=" %%A In ('Dir/B/O-D/TC "%msk%"') Do If Defined MRF (GoTo :Next
) Else Set "MRF=%%A"
Exit /B

:Next
Set "Val="
For /F %%A In ('Find /I /C "String name"^<"%MRF%"') Do Set "Val=%%A"
If Defined Val (Echo Thread,%Val% & Pause)

答案 2 :(得分:0)

for /f "delims=" %%a in ('dir /b /s /o-d %loc%') do for /f %%b in ('find /c /i "String name" ^<"%%a"') do echo Thread,%%b&goto done
:done

应该完成任务。

dir以反向日期顺序输出仅限文件名的完全限定文件名列表; "delims="确保将整个文件名分配给%%a。生成第一个文件名时,find会定位并计算目标字符串并将计数分配给%%becho前面的Thread,,然后使用for突破goto循环。

虽然语法set loc="D:\location\loc1\File Name*.dbg"非常合法,但set "loc=D:\location\loc1\File Name*.dbg"是首选,因为引号会分隔要分配的字符串,确保值中不包含任何不可见的尾随空格。如果采用此约定,则dir子命令需要"%loc%"以允许loc包含分隔符。