2009-11-20 2 views
3

Я нашел код для удаления папок, в этом случае удаление всех, кроме '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

@Echo ON, чтобы посмотреть, что он делает. –

ответ

0

Используйте RD C:\BLAH /S /Q команды для Windows,

0

Есть два инструмента, я могу думать о том, чтобы проверить разрешение на каталоге ,

Чтобы удалить только для чтения на каталоги использовать

attrib -r /s <directory_name> 

Для просмотра справки о предоставлении разрешений на каталог

cacls /? 
1

For /F линия является ключом. Он принимает результаты части строки в одинарных кавычках и выполняет итерацию по ней.

Таким образом, требуется список каталогов файлов в целевом каталоге, исключая первые строки n, основанные на переменной _NumtoKeep, и представлены результаты.

После этого задание вопрос Set _rdflag= /q линия, подтверждение действия, перед тем как делать работу.

Смежные вопросы