我有一个名为x的文件夹,其中包含许多子文件夹和文件。我想删除x中存在的名为y的文件夹及其所有子文件夹。必须删除的所述文件夹可能包含也可能不包含任何文件。我相信我可以使用cmd或某种批处理文件来做到这一点,但我是命令行new bi并且可以真正使用一些帮助。
一个简单的事情就是找到文件夹的名称,这有用,但我相信有比单独删除每个文件夹更好的方法..就像一些遍历所有文件夹的循环。
由于
编辑:只是为了澄清,我有x(需要删除的文件夹)在x内部,它可以在任何x的子文件夹和任何深度级别。此外,我正在寻找答案,我可能需要一些时间来接受任何答案。请耐心等待:))
答案 0 :(得分:7)
这是评论的另一个解决方案,用于描述脚本的每个部分:
@Echo OFF
REM Important that Delayed Expansion is Enabled
setlocal enabledelayedexpansion
REM This sets what folder the batch is looking for and the root in which it starts the search:
set /p foldername=Please enter the foldername you want to delete:
set /p root=Please enter the root directory (ex: C:\TestFolder)
REM Checks each directory in the given root
FOR /R %root% %%A IN (.) DO (
if '%%A'=='' goto end
REM Correctly parses info for executing the loop and RM functions
set dir="%%A"
set dir=!dir:.=!
set directory=%%A
set directory=!directory::=!
set directory=!directory:\=;!
REM Checks each directory
for /f "tokens=* delims=;" %%P in ("!directory!") do call :loop %%P
)
REM After each directory is checked the batch will allow you to see folders deleted.
:end
pause
endlocal
exit
REM This loop checks each folder inside the directory for the specified folder name. This allows you to check multiple nested directories.
:loop
if '%1'=='' goto endloop
if '%1'=='%foldername%' (
rd /S /Q !dir!
echo !dir! was deleted.
)
SHIFT
goto :loop
:endloop
您可以从初始变量前面取出/p
,如果您不想被提示,只需在=
之后输入值:
set foldername=
set root=
您还可以删除循环部分中的echo
和结尾部分中的pause
,以便批量静默运行。
它可能有点复杂,但代码可以应用于许多其他用途。
我测试了它在qwerty
中寻找同一个foldername C:\Test
的多个实例:
C:\Test\qwerty
C:\Test\qwerty\subfolder
C:\Test\test\qwerty
C:\Test\test\test\qwerty
剩下的就是:
C:\Test\
C:\Test\test\
C:\Test\test\test\
答案 1 :(得分:5)
FOR /D /R %%X IN (fileprefix*) DO RD /S /Q "%%X"
注意使用它......
用于RD命令:
/S Removes all directories and files in the specified directory
in addition to the directory itself. Used to remove a directory
tree.
/Q Quiet mode, do not ask if ok to remove a directory tree with /S
FOR命令用于循环遍历文件或变量列表,选项很容易记忆,目录只能递归。
答案 2 :(得分:1)
此类主题的一个常见问题是,如果在多个级别存在目标文件夹的实例,则大多数方法都会导致错误,因为删除高级别文件夹时,其下面的所有文件夹都会消失。例如:
C:\X\Y\subfolder
C:\X\Y\subfolder\one\Y
C:\X\Y\subfolder\two\Y
C:\X\Y\subfolder\three\Y
C:\X\test
C:\X\test\test
上一个示例生成一个包含名为Y的4个文件夹的列表,这些文件夹将被删除,但在删除第一个文件夹后,其余三个名称将不再存在,从而在尝试删除时会出现错误消息。我知道这可能是你的情况。
要解决此问题,必须以自下而上的顺序删除文件夹,即必须先删除最里面的文件夹,最后删除顶级文件夹。实现此目的的方法是通过递归子例程:
@echo off
rem Enter into top level folder, process it and go back to original folder
pushd x
call :processFolder
popd
goto :EOF
:processFolder
rem For each folder in this level
for /D %%a in (*) do (
rem Enter into it, process it and go back to original
cd %%a
call :processFolder
cd ..
rem If is the target folder, delete it
if /I "%%a" == "y" (
rd /S /Q "%%a"
)
)
exit /B
虽然在这种特殊情况下,其他方法引起的问题只是多个错误消息,但在其他情况下,此处理顺序是基本的。
答案 3 :(得分:0)
使用以下内容制作.bat:
del /q "C:\Users\XXX\AppData\Local\Temp\*"
FOR /D %%p IN ("C:\Users\XXX\AppData\Local\Temp\*.*") DO rmdir "%%p" /s /q