0

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

该进程运行并因此创建一个文件,主要是一个日志文件。当它创建第 ​​800 个文件时,文件名将类似于“filename.800”。文件名可以不同,但​​扩展名可以是 000 - 999 之间的任何内容。我需要删除“filename.*”来收集达到 800(或其他)的文件。在同一目录中还有其他名称不同但具有数字扩展名的文件。我正在尝试将这部分作为自动清理过程的一部分。

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

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

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

4

3 回答 3

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

如果要在批处理脚本中使用该命令,请将百分比加倍。

于 2013-06-06T16:16:15.217 回答
1

如果要精确删除800-999 范围内的文件,那么最简单、最快捷的方法是:

for %%a in (8 9) do del filename.%%a??

以前的方法甚至可以针对其他不同的范围进行调整。

于 2013-06-06T19:20:57.687 回答
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用于控制台。替换ECHODEL删除文件-经过严格测试...

于 2013-06-06T17:31:19.773 回答