如何从批处理文件中仅删除空目录

问题描述 投票:0回答:5

有没有办法从批处理文件中删除给定目录下的所有空子目录?

或者是否可以递归复制目录,但排除任何空目录?

windows batch-file
5个回答
13
投票

您确实有两个问题:

1。有没有办法从批处理文件中删除给定目录下的所有空子目录?

是的。这个一行 DOS 批处理文件对我有用。您可以传入模式/根的参数,否则它将使用当前目录。

for /f "delims=" %%d in ('dir /s /b /ad %1 ^| sort /r') do rd "%%d" 2>nul

我使用“dir|sort”的原因是为了性能(“dir”和“sort”都相当快)。它避免了其他答案之一中使用的递归批处理函数解决方案,该解决方案完全有效,但速度可能慢得令人恼火:-(

2。或者是否可以递归复制目录,但排除任何空目录?

其他答案中列出了多种方法来执行此操作。


5
投票

要复制忽略空目录,您可以使用以下之一:

robocopy c:\source\ c:\dest\ * /s
xcopy c:\source c:\dest\*.* /s

3
投票
@echo off
setlocal ENABLEEXTENSIONS
call :rmemptydirs "%~1"
goto:EOF
:rmemptydirs
FOR /D %%A IN ("%~1\*") DO (
    REM recurse into subfolders first...
 call :rmemptydirs "%%~fA"
)
RD "%~f1" >nul 2>&1
goto:EOF

致电:

rmemptydirs.cmd "c:\root dir to delete empty folders in"


3
投票

xcopy 的 /s 复制时会忽略空白文件夹

xcopy * path\to\newfolder /s /q

-1
投票

这个批处理文件在任何路径上都能很好地发挥作用,在我的例子中,我使用 Windows 环境变量 IWAY61 :

@echo off

cd %IWAY61%

for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"
© www.soinside.com 2019 - 2024. All rights reserved.