我正在尝试创建一个批处理文件,我可以使用该文件找到某些字符串计数然后显示它以进行监视,我的批处理文件适用于静态文件,但是当文件名是动态的时,就像文件名中的最新日期一样,它搜索所有文件而不是只搜索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
答案 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
会定位并计算目标字符串并将计数分配给%%b
。 echo
前面的Thread,
,然后使用for
突破goto
循环。
虽然语法set loc="D:\location\loc1\File Name*.dbg"
非常合法,但set "loc=D:\location\loc1\File Name*.dbg"
是首选,因为引号会分隔要分配的字符串,确保值中不包含任何不可见的尾随空格。如果采用此约定,则dir
子命令需要"%loc%"
以允许loc
包含分隔符。