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 7 Win7批处理脚本中的正则表达式?_Windows 7_Batch File - Fatal编程技术网

Windows 7 Win7批处理脚本中的正则表达式?

Windows 7 Win7批处理脚本中的正则表达式?,windows-7,batch-file,Windows 7,Batch File,我有如下文件名: M0654871_07_05_2011.pdf M0654871_07_15_2011.pdf 其中07_05_2011是日期(MM_DD_yyy),M之后的第一个数字只是一个“随机”数字 我正在编写一个.bat文件,该文件循环遍历该目录中的所有文件。我希望脚本每天计算文件数(基于文件名,而不是修改日期) 批处理脚本中似乎没有任何正则表达式。有没有一种方法可以在Windows.bat脚本中实现这一点,而无需下载更多工具/软件 (我可能每天都会对每个文件名字符串进行一次硬循环检查

我有如下文件名:

M0654871_07_05_2011.pdf
M0654871_07_15_2011.pdf

其中07_05_2011是日期(MM_DD_yyy),M之后的第一个数字只是一个“随机”数字

我正在编写一个.bat文件,该文件循环遍历该目录中的所有文件。我希望脚本每天计算文件数(基于文件名,而不是修改日期)

批处理脚本中似乎没有任何正则表达式。有没有一种方法可以在Windows.bat脚本中实现这一点,而无需下载更多工具/软件

(我可能每天都会对每个文件名字符串进行一次硬循环检查,但考虑到有10k+个文件,这有点过分)


我发现findstr可以在某种程度上执行正则表达式,但是有没有一种方法可以使用它来循环文件并提取每个日期的文件数,而不是循环日期并提取文件数?

findstr中没有任何东西可以直接做您想要做的事情,但使用FOR循环加上扩展子串和SET算法很容易

下面的代码(没有FINDSTR)可能足够好,这取决于目录中可能存在哪些其他文件(未测试,但应该可以工作,除非我让一个愚蠢的错误溜走)。代码的工作原理是创建一个计数变量,该变量的名称基于文件名中的日期

@echo off
setlocal enableDelayedExpansion
for %%F in (M*_??_??_????.pdf) do (
  set "fname=%%~nF"
  set /a fileDate_!fname:~-10!+=1
)
set fileDate_
如果您想更精确地在名称的最后10个字符中查找有效日期,那么可以通过管道将DIR的输出传递到FINDSTR正则表达式。(再次未经测试)

正则表达式并没有严格限制自己的有效日期,但很可能它已经足够了。使用多个正则表达式搜索字符串可能会更加精确,但FINDSTR的严重限制将使其变得更加困难(请参阅)

@echo off
setlocal enableDelayedExpansion
for /f %%F in ('dir /b M*_??_??_????.pdf ^| findstr /lixc:"M[0-9]*_[01][0-9]_[0-3][0-9]_[0-9][0-9][0-9][0-9]') do (
  set "fname=%%~nF"
  set /a fileDate_!fname:~-10!+=1
)
set fileDate_