查找扩展名大于特定数字的文件

时间:2013-06-06 15:48:51

标签: windows file batch-file

我正在尝试创建一个脚本,该脚本将在目录中搜索扩展名大于特定数值的文件。我正在监视的进程在运行时会创建带有数字扩展名的文件。我的最终目标是删除某个文件名的所有文件,其中一个文件扩展名超过800。

该过程运行并创建一个文件,主要是日志文件。当它创建第800个文件时,文件名将类似于“filename.800”。文件名可以有所不同,但扩展名将是000 - 999.我需要删除“filename。*”来获取800(或其他)文件的集合。还有其他不同名称的文件,但在同一目录中也有数字扩展名。我正在努力使这部分成为自动清理过程。

我可以使用一些关于如何开始检测文件存在的建议。我下面的初步尝试似乎没有留意'GTR','LSS'选项。

forfiles /M *.* /C "%comspec% /c IF @EXT GTR 800 (ECHO @PATH)"

我不介意用其他方法来解决我的任务。提前谢谢。

3 个答案:

答案 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以删除文件......