1

Perhaps someone can be of help; I have several files with the following naming convention:

fooR1.txt, fooR2.txt, fooR3.txt, . . . , fooR1000.txt  

I wish to delete all the files greater than R500. I have several folders and I know how to pass through each folder, but I am not sure how to capture and delete the files with replication 501 and greater. How can I do such?

4

4 回答 4

1

这将删除fooR###.txt### 大于 500 的所有文件。

@echo off

setlocal EnableDelayedExpansion

for %%f in (fooR*.txt) do (
  set num=%%~f
  set num=!num:~4,-4!
  if !num! gtr 500 del /q "%%~f"
)

endlocal
于 2012-09-05T00:26:56.193 回答
1

简单地说:

ren foo500.txt foo499bis.txt
del fooR5??.txt fooR6??.txt fooR7??.txt fooR8??.txt fooR9??.txt fooR10??.txt 
ren foo499bis.txt foo500.txt

不优雅,但高效。

于 2012-09-04T22:38:15.440 回答
0

因为您的范围是开放的,所以我颠倒了您的标准:删除不在 1-499 范围内的任何内容。请注意,这并不完全等同于您的,例如它还会删除一个名为的文件fooR001.txt,或者fooR_something_else.txt
它也很慢。

@echo off
for %%F in (fooR*.txt) do (
  echo %%F | findstr  /v /r "fooR[1-9]\.txt fooR[1-9][0-9]\.txt  fooR[1-4][0-9][0-9]\.txt" >nul  && echo del %%F
)

第一行 ( for) 枚举以 开头的文件fooR,然后为每个文件findstr检查它是否匹配模式(/v选项),最后如果检查(即不匹配)为正则执行命令(&&意味着仅在前一个命令成功时执行) .
上面的代码只会回显命令,而不是执行它们,因此您可以安全地运行它来验证它实际上是否正常运行。要实际运行删除,只需echo在它前面删除即可。

注意:您实际上可以直接从命令行以以下形式运行它:

@for %F in (fooR*.txt) do @echo %%F | findstr  /v /r "fooR[1-9]\.txt fooR[1-9][0-9]\.txt  fooR[1-4][0-9][0-9]\.txt" >nul  && echo del %F
于 2012-09-05T13:35:25.300 回答
-1

您需要为此制作一个批处理脚本。然后在批处理文件中你可以写。

DEL "fooR500.txt"

要删除所有以 .txt 结尾的文件,您只需编写:

DEL "*.txt"

这就是我所知道的,但如果你想得到它,所以它执行文件 500 和更高的文件,你必须在 Batch 中创建一个变量来保存值 500,使用:

set Value = 500

然后让它删除文件“fooR”+索引+“.txt”所以你必须这样做:

set "FilePre = fooR"
set "FileW  = %FilePre% %Value%"
set "Ex = .txt"
set "FileX = %FileW% %Ex%"
del FileX

然后你必须让 Value 上升 1 并重复这个过程 500 次,直到它达到 1000。

于 2012-09-04T22:47:06.900 回答