如何从批处理中的所有卷中递归删除命名目录?

时间:2018-08-07 07:49:10

标签: batch-file mounted-volumes

echo off
for /d /r "c:\" %%a in (TemporaryFolder) do if exist "%%a" echo Removing %%a & rmdir /s /q "%%a"

for loop从C:\驱动器中删除每个名为“ TemporaryFolder”的目录。如何浏览每个已安装的卷(即A:\-Z :)以删除目录“ TemporaryFolder”?

编辑(此测试无效):

@echo off
echo Deleting Temporary Folders... Please be patient.
For /F "Tokens=*" %%A In ('MountVol^|Find ":\"') Do For /F "Delims=" %%B In ('Dir /B/S/AD-S-L "%%ATemporaryFolder" 2^>Nul') Do RD /S/Q "%%B" 2>Nul & echo Deleting %%B
echo Successfully deleted.
pause

1 个答案:

答案 0 :(得分:0)

根据我的评论,下面是一个嵌套For循环的示例,该循环应按要求进行:

For /F "Tokens=*" %%A In ('MountVol^|Find ":\"') Do For /F "Delims=" %%B In ('Dir /B/S/AD-S-L "%%ATemporaryFolder" 2^>Nul') Do RD /S/Q "%%B" 2>Nul

外部For循环运行MountVol命令,该命令将挂载的驱动器路径返回为%%A。嵌套的For循环对位于TemporaryFolder中的名为%%A的目录执行递归目录搜索。

修改

以下是同一例程的多行版本,其中添加了消息:

@Echo Off
Set "objFolder=TemporaryFolder"
Echo Please be patient...
For /F "Tokens=*" %%A In ('MountVol^|Find ":\"') Do (
    Echo Deleting directories named %objFolder% from %%A
    For /F "Delims=" %%B In ('Dir /B/S/AD-S-L "%%A%objFolder%" 2^>Nul') Do (
        Echo Deleting %%B
        RD /S/Q "%%B" 2>Nul && Echo Successfully deleted %%B
    )
)
Pause

您应该修改objFolder行上的2名称。


此驱动器使用MountVol代替PowerShell来获取驱动器,并且也匹配系统和重新解析点,(请注意您需要适当的权限才能删除系统目录)

@Echo Off
Set "objFolder=TemporaryFolder"
Echo Please be patient...
For /F "Tokens=*" %%A In (
    'PowerShell -NoP "GDr -P FileSystem|?{!$_.Used -Eq ''}|Select -Exp Root"'
) Do (Echo Deleting directories named %objFolder% from %%A
    For /F "Delims=" %%B In ('Dir /B/S/AD "%%A%objFolder%" 2^>Nul') Do (
        Echo Deleting %%B
        RD /S/Q "%%B" 2>Nul && Echo Successfully deleted %%B
    )
)
Pause
相关问题