用于删除 "Starts with" 以外的所有文件夹的批处理脚本

Batch script to delete all folders except of "Starts with"

我有一个包含多个子文件夹的文件夹。结构如下:

我有时希望使用以下批处理脚本删除文件夹及其包含的文件:

rmdir C:\foo /s /q

这里C:\foo整个文件夹被彻底删除也没关系

但现在我只想删除 C:\foo 的子文件夹及其包含的文件,不要以“web.”开头。.

你有什么好的解决办法吗?

下面应该可以解决问题,注意它是一个使用当前目录的批处理文件:

@echo off
for /F "delims=" %%D in ('dir /B /AD ^| findstr /V "^web."') do (
   echo rmdir %%D /s /q
)

如果没问题把rmdir前面的echo去掉。

由于 /AD,dir 命令仅列出目录名称,由于 /B,使用简单的名称输出。要在开头使用 findstr/V 进行搜索。对于否定使用 ^。此外,管道符号需要转义 ^|.


如果您想要一个使用参数的动态批处理脚本,您可以使用以下命令,通过 batchname.bat "C:\foo" web. 调用它(如果可以,请删除 rmdir 前面的 echo。) :

@echo off

set INVARGS=0
if [%1] == [] set "INVARGS=1"
if [%2] == [] set "INVARGS=1"
if %INVARGS% == 1 (
   echo echo %0 ^<directory^> ^<directory_prefix^>
   goto eof
)

set "folder=%1%"
set "prefix=%2%"

pushd "%folder%"
echo List of folders that should be deleted:
for /F "delims=" %%D in ('dir /B /AD ^| findstr /v "^%prefix%"') do (
   echo "%cd%\%%D"
)
popd

:choice
echo.
set /P "c=Are you sure you want to continue [Y/N]?"
if /I "%c%" EQU "Y" goto yes
if /I "%c%" EQU "N" goto eof
goto :choice

:yes
echo.
pushd "%folder%"
for /F "delims=" %%D in ('dir /B /AD ^| findstr /v "^%prefix%"') do (
   echo rmdir %%D /s /q
)
popd

:eof

这将删除所有以 web.

开头的文件
@echo off
setlocal EnableDelayedExpansion

for /f %%F in ('dir /b /s') do (
    set "name=%%~nF"
    if /i not "!name:~0,4!" == "web." (
        rm !name!
    )
)