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

Компьютерный форум 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

 

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

Ветеран


Contributor


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

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


DemoN911, добавить еще ключ /S.
И все это есть в del /?

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


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



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

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


Новый участник


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

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


Народ подскажите тупому чайнику как сделать чтобы при первом входе после инсталляции удалялась папка инсталл автоматически. Использовался метод $OEM$>$1>INSTALL

Отправлено: 21:17, 05-12-2010 | #12


Аватара для Bond01

Ветеран


Автор проектов


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

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


Можно создать дерево папок $OEM$\$1\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
и в нее положить файл dell.cmd для удаления папок

Отправлено: 22:12, 05-12-2010 | #13


Ветеран


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

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


Как поправить скрипт, чтобы считалась сумма файлов, которые реально удаляются. Файлы, занятые системой не считать.
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion

set Rash=*.log;*.temp;*.tmp;

For /F "Delims=" %%I In ('Dir c:\%Rash% /B/S/A:-D-H 2^>nul') Do (
	2>&1 del /q "%%I" | 1>nul findstr "."
	if errorlevel 1 (set /a iSumL +=%%~zI)
)
Set /A Cnt +=!iSumL!
echo !cnt!
pause

Последний раз редактировалось sov44, 04-09-2013 в 15:44.


Отправлено: 15:22, 04-09-2013 | #14


Ветеран


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

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


Немного поправил скрипт, но всё равно не удаётся добиться нуля при повторном запуске. Есть идеи?
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion

for %%a in (log temp tmp) do (
for /f "delims=" %%i in ('dir /b /s /a-d-h "c:\*.%%a" 2^>nul') do (
	2>&1 del /q "%%i" | 1>nul findstr "."
	if errorlevel 1 (set /a iSumL+=%%~zi)
))
echo %iSumL%
Set /A Cnt +=!iSumL!
echo !cnt!
pause

Отправлено: 22:35, 04-09-2013 | #15


Ветеран


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

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


Не проверялось:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set /a iSumL = 0

for /f "usebackq delims=" %%i in (`dir /b /s /a:-d /a:-h "c:\*.log" "c:\*.temp" "c:\*.tmp" 2^>nul`) do (
	2>nul del /f /q "%%i" && set /a iSumL += %%~zi
)

echo %iSumL%

endlocal
exit /b 0

Отправлено: 03:16, 05-09-2013 | #16


Ветеран


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

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


Iska, проверил, при повторном запуске сумма не ноль.

Отправлено: 08:58, 05-09-2013 | #17


Ветеран


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

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


sov44, Вы хотите, чтобы шло некое накопление, доступное между сеансами? Можно, например, хранить значение в файле, связанном с именем и местоположением пакетного файла, наподобие (тоже не проверялось):
читать дальше »
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSaveFile=%~dpn0.sav

if exist "%sSaveFile%" (
	<"%sSaveFile%" set /p iSumL=
) else (
	set /a iSumL = 0
)

for /f "usebackq delims=" %%i in (`dir /b /s /a:-d /a:-h "c:\*.log" "c:\*.temp" "c:\*.tmp" 2^>nul`) do (
	2>nul del /f /q "%%i" && set /a iSumL += %%~zi
)

>"%sSaveFile%" echo %iSumL%
echo %iSumL%

endlocal
exit /b 0

Совсем же правильным будет использовать папку и файл в %AppData%.

Можно пойти ещё дальше и хранить значение в реестре, в разделе текущего пользователя. И аналогичным образом извлекать значение в начале работы пакетного файла и записывать вобрат в конце работы.

Цитата sov44:
Iska, проверил, при повторном запуске сумма не ноль. »
Так, стоп. Дошло, о чём вопрос. Я же его понял с точностью до наоборот . Забудьте предыдущий текст.

А почему Вы полагаете, что в промежутке между двумя запусками пакетного файла не могут создаваться никакие временные файлы или лог-файлы?! Почему они не могут создаваться и уже в момент его работы?!

Отправлено: 09:25, 05-09-2013 | #18


Ветеран


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

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


Цитата Iska:
временные файлы или лог-файлы?! Почему они не могут создаваться и уже в момент его работы?! »
Наверное могут. Однако при отключении @echi off я вижу, что скрипт обращается к одним и тем-же файлам, их считает но не удаляет, т.к. они заняты системой. Выловить и исключить их из арифметики через errorlevel не удаётся.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:00, 05-09-2013 | #19


Ветеран


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

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


Цитата sov44:
Выловить и исключить их из арифметики через errorlevel не удаётся. »
Вы правы. Память уже подводит: CMD/BAT - [решено] Как отследить ERRORLEVEL, если файл не удаляется.

Тогда давайте попробуем так (не проверялось):
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set /a iSumL = 0

for /f "usebackq delims=" %%i in (`dir /b /s /a:-d /a:-h "c:\*.log" "c:\*.temp" "c:\*.tmp" 2^>nul`) do (
	set /a iSize = %%~zi
	2>nul del /f /q "%%i"
	if not exist "%%i"set /a iSumL += !iSize!
)

echo %iSumL%

endlocal
exit /b 0
Конечно, если файл постоянно воссоздаётся — будет погрешность на его предыдущий размер..
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:07, 05-09-2013 | #20



Компьютерный форум 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




 
Переход