CMD删除文件

CMD删除文件,cmd,delete-file,Cmd,Delete File,也许有人能帮上忙;我有几个具有以下命名约定的文件: fooR1.txt, fooR2.txt, fooR3.txt, . . . , fooR1000.txt 我希望删除所有大于R500的文件。我有几个文件夹,我知道如何通过每个文件夹,但我不知道如何使用replication 501及更高版本捕获和删除文件。我该怎么做呢?简单地说: ren foo500.txt foo499bis.txt del fooR5??.txt fooR6??.txt fooR7??.txt fooR8??.tx

也许有人能帮上忙;我有几个具有以下命名约定的文件:

fooR1.txt, fooR2.txt, fooR3.txt, . . . , fooR1000.txt  
我希望删除所有大于R500的文件。我有几个文件夹,我知道如何通过每个文件夹,但我不知道如何使用replication 501及更高版本捕获和删除文件。我该怎么做呢?

简单地说:

ren foo500.txt foo499bis.txt
del fooR5??.txt fooR6??.txt fooR7??.txt fooR8??.txt fooR9??.txt fooR10??.txt 
ren foo499bis.txt foo500.txt
不优雅,但高效。

简单地说:

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

不优雅,但效率很高。

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

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

DEL "*.txt"
这就是我所知道的,但如果你想得到它,那么它会有500或更高的文件 要批量创建保存值500的变量,请使用:

set Value = 500
然后让它删除文件“fooR”+Index+“.txt”,这样您就必须执行以下操作:

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

然后,您必须使值增加1,并重复该过程500次,直到达到1000次。

您需要为此创建一个批处理脚本。然后可以在批处理文件中写入

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

DEL "*.txt"
这就是我所知道的,但如果你想得到它,那么它会有500或更高的文件 要批量创建保存值500的变量,请使用:

set Value = 500
然后让它删除文件“fooR”+Index+“.txt”,这样您就必须执行以下操作:

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

然后您必须将值增加1,并重复该过程500次,直到达到1000。

这将删除所有文件
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

这将删除所有文件
fooR####.txt
where####大于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

因为您的范围是开放的,所以我颠倒了您的标准:删除任何不在1-499范围内的内容。请注意,这并不完全等同于您的文件,例如,它还将删除名为
fooR001.txt
fooR\u something\u other.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
选项),最后,如果检查(即不匹配)为正(
&
表示仅在前一个命令成功时执行).
上面的代码将只是回显命令,而不是执行命令,所以您可以安全地运行它,以验证它是否实际表现出应有的行为。要真正运行delete,只需删除它前面的
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

因为您的范围是开放的,所以我颠倒了您的标准:删除任何不在1-499范围内的内容。请注意,这并不完全等同于您的文件,例如,它还将删除名为
fooR001.txt
fooR\u something\u other.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
选项),最后,如果检查(即不匹配)为正(
&
表示仅在前一个命令成功时执行).
上面的代码将只是回显命令,而不是执行命令,所以您可以安全地运行它,以验证它是否实际表现出应有的行为。要真正运行delete,只需删除它前面的
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

完美的我完全忘了我能用吗?在CMD中,@stefaniemandon
fooR5???.txt
也将匹配
fooR5.txt
fooR50.txt
等。首先使用它运行一个目录,以确保删除的内容不会超出您的期望!事实上…它删除了比我想要的更多的内容。我会尝试其他的选择。谢谢,太好了!我完全忘了我能用吗?在CMD中,@stefaniemandon
fooR5???.txt
也将匹配
fooR5.txt
fooR50.txt
等。首先使用它运行一个目录,以确保删除的内容不会超出您的期望!事实上…它删除了比我想要的更多的内容。我会尝试其他的选择。谢谢。您需要
del/q“fooR!num!”.txt
,不是吗<代码>!嗯仅包含数字本身。而且,首先,您的can还将匹配一个名为
fooRa.txt
(即
fooR
之后的所有内容都不是数字)-尽管这是否是一个由OP决定的问题。@Christian.K OP没有提到任何其他文件,所以我没有解释这一点。当然,这应该是
del/q“%%~f”
。谢谢提醒,现在已经修好了。你需要
del/q“fooR!num!”.txt
,不是吗<代码>!嗯仅包含数字本身。而且,首先,您的can还将匹配一个名为
fooRa.txt
(即
fooR
之后的所有内容都不是数字)-尽管这是否是一个由OP决定的问题。@Christian.K OP没有提到任何其他文件,所以我没有解释这一点。当然,这应该是
del/q“%%~f”
。谢谢你的提醒,现在已经修好了。这太尴尬了:(1)这不是对老年退休金问题的回答。(2) 以创建尾随空白的名称的方式设置变量。例如,
FilePre
实际上只能作为
%FilePre%
使用(注意空格)。(1)这是删除500-1000个文件的答案,(2)我不是一个了不起的批处理程序员,我只是使用了我记得做过的事情。谢谢你的输入,尽管我并不在乎你说什么。你的“答案”是删除文件
fooR500.txt
本身,或者删除所有扩展名为
*.txt
-的文件,或者删除文件名
FileX
(最后一行代码)。内