用于删除"以"开头的所有文件夹的批处理脚本

时间:2017-07-20 07:38:54

标签: windows batch-file cmd directory rmdir

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

  • C:\ FOO
  • C:\ FOO \ web.foo
  • C:\ FOO \ web.bar
  • C:\ FOO \ win.foo
  • C:\ FOO \ win.bar
  • C:\ FOO \ mobile.foo
  • C:\ FOO \ mobile.bar

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

/* test menu */

.menu-main-menu-container {float:right;}

    .menu {

        display:inline-block;
float:right;


    }

    .menu ul.menu {
        display:none;
float:right;
    }

    .menu ul {

        float:right;
        top:120%;
        z-index:10000;
    }



    .menu li {

        float:left;
        display:block;
    }

    .menu a {
        display:block;
    }

    .toggle-nav {
        padding:20px;
        float:right;
        display:inline-block;
        box-shadow:0px 1px 1px rgba(0,0,0,0.15);
        border-radius:3px;
        background-color: #0078d7;  
        text-shadow:0px 1px 0px rgba(0,0,0,0.5);
        color:#ffffff;
        font-size:20px;
        transition:color linear 0.15s;
    }

    .toggle-nav:hover, .toggle-nav.menu {
        text-decoration:none;
        color:#ffffff;
        background-color: #229DFC;
        float:right;
    }

完全删除整个文件夹C:\ foo并不重要。

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

你有什么好的解决方案吗?

提前谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

如果可以,请移除echo前面的rmdir

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

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

@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

答案 1 :(得分:0)

这将删除以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!
    )
)