我找到了一些删除文件夹的代码,在这种情况下删除除“n”个文件夹以外的所有文件夹。 我创建了10个测试文件夹,加上已经存在的1个。我想删除除4之外的所有内容。 代码工作,它留下了我的4个测试文件夹,但它也离开了另一个文件夹。是否在批处理文件中检查了另一个文件夹的某些属性是否阻止它被删除?它是几周前通过一份工作创建的。
这是我偷的代码(但不太了解细节):
rem DOS - Delete Folders if # folders > n
@Echo Off
:: User Variables
:: Set this to the number of folders you want to keep
Set _NumtoKeep=4
:: Set this to the folder that contains the folders to check and delete
Set _Path=C:\MyFolder_Temp\FolderTest
If Exist "%temp%\tf}1{" Del "%temp%\tf}1{"
PushD %_Path%
Set _s=%_NumtoKeep%
If %_NumtoKeep%==1 set _s=single
For /F "tokens=* skip=%_NumtoKeep%" %%I In ('dir "%_Path%" /AD /B /O-D /TW') Do (
If Exist "%temp%\tf}1{" (
Echo %%I:%%~fI >>"%temp%\tf}1{"
) Else (
Echo.>"%temp%\tf}1{"
Echo Do you wish to delete the following folders?>>"%temp%\tf}1{"
Echo Date Name>>"%temp%\tf}1{"
Echo %%I:%%~fI >>"%temp%\tf}1{"
))
PopD
If Not Exist "%temp%\tf}1{" Echo No Folders Found to delete & Goto _Done
Type "%temp%\tf}1{" | More
Set _rdflag= /q
Goto _Removeold
Set _rdflag=
:_Removeold
For /F "tokens=1* skip=3 Delims=:" %%I In ('type "%temp%\tf}1{"') Do (
If "%_rdflag%"=="" Echo Deleting
rd /s%_rdflag% "%%J")
:_Done
If Exist "%temp%\tf}1{" Del "%temp%\tf}1{"
答案 0 :(得分:1)
For /F
行是关键。它以单引号的形式获取该部分行的结果,并对其进行迭代。
因此,它需要目标目录中文件的目录列表,根据_NumtoKeep
变量排除第一个 n 行,并显示结果。
然后,在完成工作之前,它会使用Set _rdflag= /q
行提出问题,确认操作。
答案 1 :(得分:0)
对Windows使用RD C:\BLAH /S /Q
命令
答案 2 :(得分:0)
我可以考虑使用两种工具来检查目录的权限。
要删除目录上的readonly,请使用
attrib -r /s <directory_name>
查看有关授予目录权限的帮助
cacls /?