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