如何使用bat删除名称中包含10个字符的所有文件?

时间:2017-04-11 21:26:44

标签: batch-file cmd

我在一个不需要的文件夹中有数千个生成的php文件。它们都具有10个字符的相同命名结构,每个例子为“rk9qiaLOaf.php”。

但我不想删除所有,因为该文件夹包含index.php,main.php等重要文件,我不希望它们被删除。

请问,如何通过批处理脚本删除文件夹中的文件,这些文件的名称数量为10。感谢您阅读我的问题。

2 个答案:

答案 0 :(得分:4)

您可以在命令提示符下使用它:

For /F "Delims=" %A In ('Where/F "C:\Users\Aung\Documents:??????????.php"') Do @Del %A

只需根据需要更改文件夹路径。

修改

递归版本,(可能需要一段时间)

For /F "Delims=" %A In ('Where/F /R "C:\Users\Aung" "??????????.php"') Do @Del %A

再次根据需要更改根文件夹(对当前目录使用

答案 1 :(得分:1)

您可以将https://laracasts.com/discuss/channels/servers/how-to-perform-php-artisan-schedulerun-on-an-ubuntu-server-with-laravel-53-for-cron-jobs?page=1dir一起使用来过滤正确的文件:

dir /B /A:-D "*.php" | findstr /I "^..........\.php$"

每个点.都匹配一个字符。 ^$确保匹配整个文件名。

要删除返回的文件,请在命令提示符cmd中使用:

for /F "delims=" %F in ('dir /B /A:-D "*.php" ^| findstr /I "^..........\.php$"') do @del "%F"

或者在批处理文件中:

for /F "delims=" %%F in ('dir /B /A:-D "*.php" ^| findstr /I "^..........\.php$"') do del "%%F"

以下是依赖findstr的替代批处理文件方法:

@echo off
setlocal DisableDelayedExpansion
for /F "delims=" %%F in ('dir /B /A:-D "*.php"') do (
    set "NAME=%%~nF" & set "EXT=%%~xF"
    setlocal EnableDelayedExpansion
    rem // Check whether file name is not longer than 10 characters:
    if "!NAME!"=="!NAME:~,10!" (
        rem // Check whether file name is longer than 9 characters:
        if not "!NAME:~9!"=="" (
            del "!NAME!!EXT!"
        )
    )
    endlocal
)
endlocal