CMD-скрипт для удаления временных файлов
Задача в следующем. Есть папка, в которой (в самой и в ее подпапках) помимо всего прочего много временных файлов вида *.tmp и ~$*.*
Нужно, чтобы эти временные файлы автоматически удалялись, если становятся старше 14 дней. Хочу решить эту задачу с помощью CMD-скрипта и утилиты forfiles.exe. На данный момент код такой: Код:
CLS Например, файл D:\Folder\My SubFolder1\My SubFolder2\My Temp File.tmp будет выглядеть как D:\Folder\My SubFolder1\My SubFolder2\My Проблема 2. Команда del пропускает файлы с атрибутом "скрытый". Если же запускать ее с параметром -a:h, то она будет, наоборот, удалять скрытые файлы и пропускать файлы без атрибута "скрытый". Пробовал также del /f /q /a:h-h, чтобы удалялись и скрытые, и не скрытые файлы. Не помогло. Аналогичная ситуация с файлами, у которых атрибут "системный". Хотелось бы узнать: есть ли возможность удаления файлов с ЛЮБЫМИ атрибутами? Проблема 3. Не могу задать несколько масок файлов для forfiles.exe (параметр /M). Хотелось бы объединить 3 и 4 строки скрипта в одну и получить что-то вроде этого: Код:
CLS Буду благодарен за любую помощь. |
Цитата:
|
forfiles.exe -pC:\Tmp\ -m*.tmp -d-14 -s -c"CMD /C del /AR /A ""@FILE"""
Длинные имена при этом не обрезаются. Удаляются все файлы с о всеми атрибутами. Несколько масок одновременно обработать не получилось, если в строке указать несколько ключей -m, обрабатывается последний. |
Получается обработать список расширений файлов в одну строку, каких-то общих символов в имени файла
Код:
FOR %%i IN (doc xls tmp) Do forfiles.exe -pC:\Tmp\ -m*.%%i -d-14 -s -c"CMD /C del /AR /A ""@FILE""" |
Iska, Спасибо, проблема 2 решена. Метод del *.* /AR /A /Q работает!
megaloman По поводу поста #3. Между параметром и его значением надо ставить пробел, иначе выскакивает ошибка "Неправильный параметр или аргумент" (т.е. надо писать не -pC:\Tmp\, а p C:\Tmp\) К сожалению, длинные имена по-прежнему обрезаются (см. вложение screenshot1.gif) По поводу поста #4. Код:
FOR %%i IN (doc xls tmp) Do forfiles.exe -p C:\Tmp\ -m *.%%i -d -14 -s -c "CMD /C del /AR /A ""@FILE""" |
Цитата:
Цитата:
Здесь список файлов, с которыми мой батник успешно справился Вот хелп от "моего" forfiles.exe P.S. Похоже, нашел я и Ваш вариант FORFILES.exe Там в хелпе параметры через / Похоже, с длинными именами он работать не хочет. Да и вообще, лучше бы обходится без нестандартных средств, что поставляются с системой. |
megaloman, спасибо! Действительно, по той ссылке, что Вы дали, лежит версия файла 5.0.2010.1 размером 12048 байт. У меня же была версия 5.2.3790.0, весившая 48640 байт. С сайта Microsoft почему-то скачать не получалось и, погуглив, я взял отсюда.
Проблемы 1 и 2 решены. А 3-я по сути даже не проблема, просто хотелось сделать скрипт компактнее и изящнее. Но если кто-то знает и ее решение - будет интересно узнать. Будем считать тему закрытой. Большое спасибо за помощь! :) |
Народ, всем драсте, нужен простой батник, ищущий и удаляющий все временные файлы (tmp) в определенной папке без всяких там изысков =) Поделитесь? Спасибо! :)
|
DemoN911,
Код:
Del /F /Q "path to folder\*.tmp" 1>nul 2>&1 |
El Sanchez, спасибо :) еще вопрос - если по тому пути есть еще и подпапки? как заставить поискать и в них? :)
|
DemoN911, добавить еще ключ /S.
И все это есть в del /? |
Народ подскажите тупому чайнику как сделать чтобы при первом входе после инсталляции удалялась папка инсталл автоматически. Использовался метод $OEM$>$1>INSTALL
|
Можно создать дерево папок $OEM$\$1\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
и в нее положить файл dell.cmd для удаления папок |
Как поправить скрипт, чтобы считалась сумма файлов, которые реально удаляются. Файлы, занятые системой не считать.
Код:
@Echo Off |
Немного поправил скрипт, но всё равно не удаётся добиться нуля при повторном запуске. Есть идеи?
Код:
@Echo Off |
Не проверялось:
Код:
@echo off |
Iska, проверил, при повторном запуске сумма не ноль.
|
sov44, Вы хотите, чтобы шло некое накопление, доступное между сеансами? Можно, например, хранить значение в файле, связанном с именем и местоположением пакетного файла, наподобие (тоже не проверялось):
Совсем же правильным будет использовать папку и файл в %AppData%. Можно пойти ещё дальше и хранить значение в реестре, в разделе текущего пользователя. И аналогичным образом извлекать значение в начале работы пакетного файла и записывать вобрат в конце работы. Цитата:
А почему Вы полагаете, что в промежутке между двумя запусками пакетного файла не могут создаваться никакие временные файлы или лог-файлы?! Почему они не могут создаваться и уже в момент его работы?! |
Цитата:
|
Цитата:
Тогда давайте попробуем так (не проверялось): Код:
@echo off |
Iska, интересный подход. Работает :up
|
Добрый день! Прошу помощи, т.к. сам не силен.
Задача: удалить все файлы по определенной маске в определенной папке. Имею такой код, выполняется правильно. Все файлы, содержащие T920 удаляются. Код:
@echo off Код:
@echo off Код:
ОШИБКА: Неправильный параметр или аргумент - '/q'. Не знаю как это побороть. Гугл не помог :( |
Денис_Гальцов@fb, сделайте «pushd "Путь"» до вызова forfiles.exe, и «popd» — после. В самом «forfiles.exe» воспользуйтесь:
Цитата:
|
Вчера почитал про pushd, с ней заработало, иначе никак не получалось у меня. Про popd не знал, спасибо!
|
Время: 10:16. |
Время: 10:16.
© OSzone.net 2001-