批处理文件/ Windows:在文件扩展名中删除带有数字的文件

时间:2016-05-18 16:43:06

标签: windows batch-file delete-file

我想删除文件扩展名中包含数字的所有文件 - 在我的例子中,文件看起来像:

FileName.1
FileName.2
FileName.3
...

我(天真地)尝试del *.*[0-9]*,但(当然)没有运气。我使用的是 Windows 7 系统,我没有管理员权限。

就像信息一样 - 这个问题与我在乳胶论坛上的问题有关:https://tex.stackexchange.com/questions/310238

感谢大家的回答。我很难说我应该接受哪些。

4 个答案:

答案 0 :(得分:2)

我会这样做:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

set "FILEMASK=%~1"
for /F "eol=| delims=" %%F in ('
    dir /B /A:-D "%FILEMASK%" ^| findstr /R "\.[0-9][0-9]*$"
') do (
    del /P /F "%%~F"
)

endlocal
exit /B

要使用此批处理程序,请提供文件掩码作为参数。如果你不这样做,那么将枚举当前目录。

添加/P命令的del开关用于测试目的,因此如果您不想显示任何提示,请将其删除。 /F开关强制删除只读文件;如果您不想要,请将其删除。

我上面讨论的文件掩码仅用于dir命令,它仅支持全局通配符*?,代表一系列字符或单个字符, 分别。另请参阅此Microsoft文章:Using wildcard characters

没有直接的方法来构建仅与数字匹配的掩码,同样根据这一点:Command-prompt wildcards for digits?

因此,我使用支持一小组正则表达式的findstr命令来过滤任何具有纯数字文件扩展名的文件。有关此有用命令的详细信息,请参阅Microsoft文章Findstr和站点FINDSTR

答案 1 :(得分:2)

此解决方案会删除数字扩展名大于0的所有文件:

@echo off
setlocal EnableDelayedExpansion

for %%a in (*.*) do (
   set "ext=%%~Xa"
   set /A "ext=!ext:~1!"
   if !ext! neq 0 del "%%a"
)

要删除多个文件夹中的文件,只需添加/R切换到for命令。

答案 2 :(得分:1)

如果您愿意使用PowerShell(Windows 7附带),您可以使用正则表达式模式。一种长期形式的方法是:

Get-ChildItem "d:\folder\" | where { $_.Extension -match '[0-9]' } | Remove-Item -Whatif

(该模式将匹配包含数字的扩展名,或使用'^\.\d+$'来匹配完全数字而非其他内容的扩展名。-WhatIf标志使其具有非破坏性,因此它会告诉您它是什么将删除,删除该标志,使其运行真实)。

有一些方法可以用简短的形式写出来,例如:

gci "d:\folder\" |? { $_.Extension -match '\d' } | rm

答案 3 :(得分:1)

说过PowerShell更好,更容易,更强大,如果我不得不采用批处理文件的方法,那可能是:

@Echo Off

rem List all filenames into a temp file
dir /b > tmpFileList.txt

rem Isolate filenames which end in numbers into another temp file
findstr /R "\.[0-9][0-9]*$" tmpFileList.txt > tmpFileList2.txt

rem Run through the second temp file, and delete those filenames
for /f "delims=" %%L in (tmpFileList2.txt) do (
    del /P "%%L"
)

rem cleanup
rm tmpFileList.txt
rm tmpFileList2.txt

删除要删除的/P而不提示。

如果没有一个或多个临时文件,您可能会这样做,但这很简单。但是,只有当所有文件都在一个文件夹中并且您位于同一文件夹中时,这才有效。 (PowerShell版本更容易使其与子文件夹一起使用)。

[编辑:调整了' for'循环所以它可以处理名称为空格的文件