我有一个包含多个子文件夹的文件夹。结构就像:
我有时希望使用以下批处理脚本删除包含其文件的文件夹:
/* 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开头。" 。
你有什么好的解决方案吗?
提前谢谢!
答案 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!
)
)