用于删除 "Starts with" 以外的所有文件夹的批处理脚本
Batch script to delete all folders except of "Starts with"
我有一个包含多个子文件夹的文件夹。结构如下:
- 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
我有时希望使用以下批处理脚本删除文件夹及其包含的文件:
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!
)
)
我有一个包含多个子文件夹的文件夹。结构如下:
- 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
我有时希望使用以下批处理脚本删除文件夹及其包含的文件:
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!
)
)