我正在尝试创建一个脚本,该脚本将在目录中搜索扩展名大于特定数值的文件。我正在监视的进程在运行时会创建带有数字扩展名的文件。我的最终目标是删除某个文件名的所有文件,其中一个文件扩展名超过800。
该过程运行并创建一个文件,主要是日志文件。当它创建第800个文件时,文件名将类似于“filename.800”。文件名可以有所不同,但扩展名将是000 - 999.我需要删除“filename。*”来获取800(或其他)文件的集合。还有其他不同名称的文件,但在同一目录中也有数字扩展名。我正在努力使这部分成为自动清理过程。
我可以使用一些关于如何开始检测文件存在的建议。我下面的初步尝试似乎没有留意'GTR','LSS'选项。
forfiles /M *.* /C "%comspec% /c IF @EXT GTR 800 (ECHO @PATH)"
我不介意用其他方法来解决我的任务。提前谢谢。
答案 0 :(得分:1)
@ext值包含引号,因此您需要将它们包含在IF比较中。但是添加引号会抛出命令行解析器,因为整个命令已经用引号括起来了。使用0x22表示每个内部引用。
forfiles /M * /C "cmd /c if @ext gtr 0x228000x22 echo @path"
然而,FORFILES非常慢。使用简单的FOR循环要快得多。 ~x
修饰符将扩展为文件扩展名(包括点)。
以下适用于命令行。
for %f in (*) do @if %~xf gtr .800 echo %f
如果要在批处理脚本中使用该命令,则加倍百分比。
答案 1 :(得分:1)
如果您想要在800-999范围内删除精确的文件,那么最简单,最快捷的方法就是:
for %%a in (8 9) do del filename.%%a??
以前的方法甚至可以针对其他不同的范围进行调整。
答案 2 :(得分:0)
@ECHO OFF
SETLOCAL
::method1
FOR %%f IN (*.8* *.9*) DO IF %%~xf gtr .800 IF %%~xf leq .999 ECHO %%f
:: method2
ECHO ======= method 2 ============
FOR %%f IN (*.8* *.9*) DO (
ECHO %%~xf|FINDSTR /r ".[89][0-9][0-9]$" >NUL
IF NOT ERRORLEVEL 1 ECHO %%f
)
第一种方法可能适用,但它也会检测xxx.8004
xxx.8a9
等文件名。
第二种方法比较慢,但我相信只会可靠地检测到以“。[8或9] [2位]”结尾的文件名
文件名只有ECHO
到控制台。在经过严格测试后,将ECHO
替换为DEL
以删除文件......