2015-06-22 3 views
3

Я создаю скрипт, который удаляет все пустые папки с подпапками в пути. Теперь мне нужно сделать, если папка была создана 2 дня назад, а ее пустая она должна быть удалена вместе с другими пустыми папками старше 2 дней. И если нет, ее не следует удалять. И мне также нужно/нужно сделать, что удаленная папка написана в журнале. Я сделал это с помощью 5 типов файлов, но я не знаю, как это работать с папками.Как удалить все пустые папки старше 2 дней?

Im действительно новый для партии, поэтому я не знаю, что я должен делать. Я проверил Google, но результаты не совпали с моей проблемой. Надеюсь, кто-то может мне помочь.

Вот мой код, который i've написано до сих пор:

@echo off 

::start path/Variables 
set startdir="C:\Users" 
::Initialize the Variable 
set /a loop=0 
::Directory c:\temp\ will be created, if the folder not exists 
if not exist c:\temp\ md c:\temp\ 
::Create Logfile for Deleted Filetypes in C:\Log\LOG_Useless_File_Killer.txt 
echo ----------------------------------- >> C:\Log\LOG_Useless_File_Killer.txt 
echo Logfile from: %date% at %time% >> C:\Log\LOG_Useless_File_Killer.txt 
echo. >> C:\Log\LOG_Useless_File_Killer.txt 
::this 5 Filetypes are going to be deleted immediately 
del C:\Users\Thumbs.db /f /q /s >> C:\Log\LOG_Useless_File_Killer.txt 
del C:\Users\desktop.ini /f /q /s >> C:\Log\LOG_Useless_File_Killer.txt 
del C:\Users\*.DS_Store /f /q /s >> C:\Log\LOG_Useless_File_Killer.txt 
del C:\Users\*._DS_Store /f /q /s >> C:\Log\LOG_Useless_File_Killer.txt 
del C:\Users\*.desktop /f /q /s >> C:\Log\LOG_Useless_File_Killer.txt 
::Writes the directorys in c:\temp\tmp.txt. 
dir /AD /b /s %startdir% > c:\temp\tmp.txt 
::at goto start it will be start again 
:start 
::the Variable %loop% is increased by 1 
set /a loop =%loop%+1 
::at 5 --> goto exit 
if %loop%==5 goto exit 
::Under 5 --> goto start 
else goto start 
::deletes every empty folder which is written in C:\temp\tmp.txt 
for /F "delims=" %%i in (c:\temp\tmp.txt) do rd "%%i" 
::--> goto start and begins again 
goto start 
::%loop% has reached 5 --> exit 
:exit 
::Console window will be closed 
exit 

pause 

exit 
+0

Вы уже искали в Stack Overflow с поисковым термином '[batch-file] old days'? Существует много похожих вопросов, таких как [Удалить вспомогательные каталоги старше 30 дней] (http://stackoverflow.com/questions/3419091/). – Mofi

+0

Ищите бесплатный инструмент под названием delage32. Мы используем его для аналогичной цели. –

+0

Я не хочу сказать, что я уже тестировал delage32, forefiles и robocopy. Но я никогда не достигал своей цели. Я искал в StackOverflow, но я не знаю, как я могу поместить это в If или For .. Потому что, когда Directorys старше, чем 2 Days (Creationdate), его следует удалить. И я не знаю, как это сделать в цикле или если ... – AmiKego

ответ

0

Pradeep абсолютно прав лучший путь для файлов.

Для удаления папки, попробуйте следующее:
Forfiles -p ""/D -15/С "CMD/с, если @isdir == TRUE, й/S/Q @path"
/D, для количество дней, вы можете играть с параметрами команды для удовлетворения точных требований.

Вы также можете использовать переменные среды, чтобы вы могли легко удалять файлы только для пользователя, который в настоящее время вошел в систему. Например, вы можете использовать %HOMEPATH%\Desktop, чтобы перейти на рабочий стол текущего пользователя. Дополнительные переменные среды here.

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