Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] CMD-скрипт для удаления временных файлов

Ответить
Настройки темы
CMD/BAT - [решено] CMD-скрипт для удаления временных файлов

Аватара для old_nick

Пользователь


Сообщения: 117
Благодарности: 0

Профиль | Отправить PM | Цитировать


Задача в следующем. Есть папка, в которой (в самой и в ее подпапках) помимо всего прочего много временных файлов вида *.tmp и ~$*.*
Нужно, чтобы эти временные файлы автоматически удалялись, если становятся старше 14 дней.
Хочу решить эту задачу с помощью CMD-скрипта и утилиты forfiles.exe.
На данный момент код такой:

Код: Выделить весь код
CLS
@ECHO OFF
forfiles.exe /P D:\Folder\ /S /M *.tmp /D -14 /C "cmd if @isdir==FALSE /C del \"@file\""
forfiles.exe /P D:\Folder\ /S /M ~$*.* /D -14 /C "cmd if @isdir==FALSE /C del \"@file\""
Проблема 1. Если имя файла содержит пробелы, то все, что после первого пробела, отсекается (при этом имена папок с пробелами обрабатываются корректно).
Например, файл 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
@ECHO OFF
forfiles.exe /P D:\Folder\ /S /M *.tmp;~$*.* /D -14 /C "cmd if @isdir==FALSE /C del \"@file\""
Как написать корректно? И возможно ли это вообще?

Буду благодарен за любую помощь.

Отправлено: 15:29, 17-09-2010

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата old_nick:
Проблема 2. Команда del пропускает файлы с атрибутом "скрытый". Если же запускать ее с параметром -a:h, то она будет, наоборот, удалять скрытые файлы и пропускать файлы без атрибута "скрытый". »
Мне разъяснили как: CMD/BAT - [решено] Удаление всех файлов из папки.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:59, 17-09-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


forfiles.exe -pC:\Tmp\ -m*.tmp -d-14 -s -c"CMD /C del /AR /A ""@FILE"""

Длинные имена при этом не обрезаются. Удаляются все файлы с о всеми атрибутами. Несколько масок одновременно обработать не получилось, если в строке указать несколько ключей -m, обрабатывается последний.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:12, 18-09-2010 | #3


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Получается обработать список расширений файлов в одну строку, каких-то общих символов в имени файла
Код: Выделить весь код
FOR %%i IN (doc xls tmp) Do forfiles.exe -pC:\Tmp\ -m*.%%i -d-14 -s -c"CMD /C del /AR /A ""@FILE"""
FOR %%i IN (~$ ~~) DO forfiles.exe -pC:\Tmp\ -m%%i*.* -d-14 -s -c"CMD /C del /AR /A ""@FILE"""
А вот задать список типа *.tmp ~*.* мне не удалось. Вероятно, гуру Amel27 смог бы победить эту проблему

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:10, 19-09-2010 | #4


Аватара для old_nick

Пользователь


Сообщения: 117
Благодарности: 0

Профиль | Отправить PM | Цитировать


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"""
Этот код вместе с временными *.tmp-файлами также будет вычищать из папки документы Word (*.doc) и таблицы Excel (*.xls). А это мне не надо. У меня НЕ временная папка, а папка с файлами пользователей, в которой вместе с нужными документами лежат временные файлы.

Последний раз редактировалось old_nick, 11-09-2012 в 17:31.


Отправлено: 19:37, 19-09-2010 | #5


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Цитата:
Этот код вместе с временными *.tmp-файлами также будет вычищать из папки документы Word (*.doc) и таблицы Excel (*.xls)
- это только пример применения нескольких расширений, не более, Вы вольны ставить любые свои расширения. Мне же на чём-то надо было тестировать батник.
Цитата:
Между параметром и его значением надо ставить пробел
- похоже, у нас разные версии forfiles.exe. То что скачал я, у меня полностью отрабатывает в соответствии с Вашими требованиями, и пробелы я не ставил.И длинные имена не режутся. Я без тестирования ничего не демонстрирую. ftp://ftp.microsoft.com/ResKit/y2kfix/x86/forfiles.exe Как видите, этот файл не из "левого" источника.
Здесь список файлов, с которыми мой батник успешно справился
читать дальше »
Printer Command Language.doc
Использование _тегов.doc
Лазерные-цветные-принтеры.doc
Мебель-Борисов.doc
Может ли человек делать то.doc
Требования к компьютерной технике.doc
Уважаемые господа.doc

Вот хелп от "моего" forfiles.exe
читать дальше »
FORFILES v 1.1 - emmanubo@microsoft.com - 4/98


Syntax : FORFILES [-pPath] [-mSearch Mask] [-ccommand] [-d<+|-><DDMMYYYY|DD>] [-s]

-pPath Path where to start searching
-mSearch Mask Search files according to <Search Mask>
-cCommand Command to execute on each file(s)
-d<+|-><DDMMYYYY|DD> Select files with date >= or <=DDMMYYYY (UTC)
or files having date >= or <= (current date - DD days)
-s Recurse directories
-v Verbose mode

The following variables can be used in Command :
@FILE, @FNAME_WITHOUT_EXT, @EXT, @PATH, @RELPATH, @ISDIR, @FSIZE, @FDATE,
@FTIME

To include special hexa characters in the command line : use 0xHH

Default : <Directory : .> <Search Mask : *.*> <Command : "CMD /C Echo @FILE">
Examples :
FORFILES -pc:\ -s -m*.BAT -c"CMD /C Echo @FILE is a batch file"
FORFILES -pc:\ -s -m*.* -c"CMD /C if @ISDIR==TRUE echo @FILE is a directory"
FORFILES -pc:\ -s -m*.* -d-100 -c"CMD /C Echo @FILE : date >= 100 days"
FORFILES -pc:\ -s -m*.* -d-01011993 -c"CMD /C Echo @FILE is quite old!"
FORFILES -pc:\ -s -m*.* -c"CMD /c echo extension of @FILE is 0x22@EXT0x22"

P.S. Похоже, нашел я и Ваш вариант FORFILES.exe Там в хелпе параметры через /
Похоже, с длинными именами он работать не хочет. Да и вообще, лучше бы обходится без нестандартных средств, что поставляются с системой.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 19-09-2010 в 22:04.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:32, 19-09-2010 | #6


Аватара для old_nick

Пользователь


Сообщения: 117
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, спасибо! Действительно, по той ссылке, что Вы дали, лежит версия файла 5.0.2010.1 размером 12048 байт. У меня же была версия 5.2.3790.0, весившая 48640 байт. С сайта Microsoft почему-то скачать не получалось и, погуглив, я взял отсюда.
Проблемы 1 и 2 решены. А 3-я по сути даже не проблема, просто хотелось сделать скрипт компактнее и изящнее. Но если кто-то знает и ее решение - будет интересно узнать.
Будем считать тему закрытой.
Большое спасибо за помощь!

Отправлено: 00:13, 20-09-2010 | #7


Пользователь


Сообщения: 88
Благодарности: 1

Профиль | Отправить PM | Цитировать


Народ, всем драсте, нужен простой батник, ищущий и удаляющий все временные файлы (tmp) в определенной папке без всяких там изысков Поделитесь? Спасибо!

Отправлено: 12:59, 23-09-2010 | #8


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024

Профиль | Отправить PM | Цитировать


DemoN911,
Код: Выделить весь код
Del /F /Q "path to folder\*.tmp" 1>nul 2>&1
Подробности: del /?

Последний раз редактировалось El Sanchez, 23-09-2010 в 20:18. Причина: очепятка

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:26, 23-09-2010 | #9


Пользователь


Сообщения: 88
Благодарности: 1

Профиль | Отправить PM | Цитировать


El Sanchez, спасибо еще вопрос - если по тому пути есть еще и подпапки? как заставить поискать и в них?

Отправлено: 14:17, 23-09-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] CMD-скрипт для удаления временных файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки avfiga Скриптовые языки администрирования Windows 71 07-01-2023 18:50
CMD/BAT - [решено] Скрипт для удаления файлов. Bond01 Скриптовые языки администрирования Windows 8 01-10-2010 11:02
VBS/WSH/JS - [решено] WSH скрипт для удаления файлов (логика скрипта внутри) Francyz Скриптовые языки администрирования Windows 11 25-05-2010 11:22
Любой язык - нужен скрипт для удаления всех файлов кроме нужных для запуска Windows XP Dark Ange1 Скриптовые языки администрирования Windows 11 07-03-2010 13:34
Проблема удаления временных файлов Интернета SAToNA Microsoft Windows 2000/XP 0 15-02-2006 07:31




 
Переход