Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何从批处理的所有卷中递归删除命名目录?_Batch File_Mounted Volumes - Fatal编程技术网

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

Batch file 如何从批处理的所有卷中递归删除命名目录?,batch-file,mounted-volumes,Batch File,Mounted Volumes,这个for循环从C:\驱动器中删除每个名为“临时文件夹”的目录。我该如何检查每个装入的卷(即A:\-Z:)以删除目录“TemporaryFolder” 编辑(此测试不起作用): 根据我的评论,下面是一个嵌套的For循环的示例,它应该按照要求执行: For/F“Tokens=*”%%A In('MountVol^ | Find:“\”)Do For/F“Delims=“%%B In('Dir/B/S/AD-S-L”%%atetemporaryfolder“2^>Nul”)Do RD/S/Q“%%B

这个
for循环
从C:\驱动器中删除每个名为“临时文件夹”的目录。我该如何检查每个装入的卷(即A:\-Z:)以删除目录“TemporaryFolder”

编辑(此测试不起作用):


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

For/F“Tokens=*”%%A In('MountVol^ | Find:“\”)Do For/F“Delims=“%%B In('Dir/B/S/AD-S-L”%%atetemporaryfolder“2^>Nul”)Do RD/S/Q“%%B”2>Nul
外部
For
循环运行
MountVol
命令,该命令将装入的驱动器路径返回为
%%A
。嵌套的
For
循环对位于
%%A
中名为
TemporaryFolder
的文件夹执行递归目录搜索

编辑

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

@Echo关闭
设置“objFolder=TemporaryFolder”
请耐心等待。。。
对于('MountVol^ | Find:\“')中的/F“Tokens=*”%%A,请执行以下操作(
回显从%%A中删除名为%objFolder%的目录
对于/F“Delims=“%%B In('Dir/B/S/AD-S-L“%%A%objFolder%”2^>num)中的(
回显删除%%B
RD/S/Q“%%B”2>Nul&Echo已成功删除%%B
)
)
暂停
您应该只修改
2
行上的
objFolder
名称


MountVol
不同,此版本使用
PowerShell
获取驱动器,并匹配系统和重新分析点(请考虑您需要适当的权限才能删除系统目录):

@Echo关闭
设置“objFolder=TemporaryFolder”
请耐心等待。。。
对于/F“令牌=*”%%A,在(
'PowerShell-NoP“GDr-P文件系统|?{!$\ Used-Eq'}选择-Exp Root''
)执行(回显从%%A中删除名为%objFolder%的目录
对于/F“Delims=“%%B In('Dir/B/S/AD“%%A%objFolder%”2^>Nul'),请执行以下操作:(
回显删除%%B
RD/S/Q“%%B”2>Nul&Echo已成功删除%%B
)
)
暂停

使用另一个
For
循环并将其嵌套在其中。顺便说一句,如果只运行脚本的第一部分,您将看到它的效率有多低,请在命令提示下尝试此操作,查看,
For/D/R“C:\%A In(临时文件夹)Do@Echo”%A
。现在,请在命令提示符下尝试我的实现,
For/F“Delims=“%A In('Dir/B/S/AD-S-L”C:\TemporaryFolder“2^>Nul”)Do@Echo“%A”
。嘿,非常感谢您的回答,我编辑了我的答案,并进行了测试,但它不起作用。你不会碰巧知道为什么吧?@sheepihd,这不起作用绝对不是一个合适的评论,请尝试提供一个更有意义的解释,以便我能帮助你确定你做错了什么!如果您认为从命令提示符运行它构成了一个正确的测试,那么您就错了,因为
%%
的所有实例都需要更改为
%%
。它不会递归地遍历每个卷,不会遍历每个目录,也不会删除任何内容。相比之下,我的脚本需要10-15秒才能完成。您的脚本不到1秒,并且没有进行任何更改。@Sheepihd,我的代码工作正常,您的实现可能不正常,但我没有时间猜测问题出在哪里。如果您希望问题得到解决,请更努力地解释您的问题是什么!同时,我将提供一个多行版本,以更接近您现在编辑的问题(我不知道您已经这样做了)。作为特别说明,如果要在命令提示下运行
DIR/?
,您会注意到
/a
选项
d
-S
-L
特别匹配
目录,它们是
非系统
非重新分析点
@Sheepihd,还请注意,我的外循环使用
MountVol
输出已装入的卷,如果您想搜索已分配给网络位置的驱动器号,则可能
MountVol
不是您需要的,并且您提供的问题参数不正确。
echo off
for /d /r "c:\" %%a in (TemporaryFolder) do if exist "%%a" echo Removing %%a & rmdir /s /q "%%a"
@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