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

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

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

Аватара для Loki3D

Старожил


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

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


подскажите, возможно ли это и как?

-------
sory 4 my rus


Отправлено: 15:15, 27-11-2009

 

Ветеран


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

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


Не знаю, как посчитать сумму удаляемых файлов в корзинах. С остальным вроде бы разобрался, но как то коряво получилось.

Последний раз редактировалось sov44, 05-05-2011 в 07:20.


Отправлено: 13:57, 01-04-2011 | #11



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

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


Ветеран


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

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


помогите с циклом
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
rem очистка корзины
FOR %%d IN (Z Y X W U V T S R Q P O N M L K J I H G F E D C) DO IF EXIST %%d:\recycler SET DirProg=%%d:\recycler
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S ') Do (
   If !flag!==1 Set dirsize=%%c
   If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
   )
Set kb=1024  Set /a mb=kb*kb, dirsizeMB=dirsize/mb, ostMB=dirsize%%mb*100/mb
echo    Очистка корзины        - OK     %dirsizeMB%,%ostMB% Мб
pause

Отправлено: 21:20, 01-04-2011 | #12


Аватара для gora

Ушёл из жизни


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

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


Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
rem очистка корзины
FOR %%d IN (Z Y X W U V T S R Q P O N M L K J I H G F E D C) DO (
	IF EXIST %%d:\RECYCLER (
		SET DirProg=%%d:\RECYCLER
		For /F "skip=4 tokens=1-3" %%a IN ('Dir "!DirProg!" /-C /S /A:-D') Do (
		   If !flag!==1 Set dirsize=%%c
		   If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
		)
		Set /A Allsize +=dirsize
	)
)
Set kb=1024
Set /a mb=kb*kb, AllsizeMB=Allsize/mb, ostMB=Allsize%%mb*100/mb
echo    Очистка корзины        - OK     %AllsizeMB%,%ostMB% Мб
Pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:50, 01-04-2011 | #13


Аватара для gora

Ушёл из жизни


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

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


Цитата sov44:
почему при запуске скрипта определения размера файла появляется ошибка: отсутствующий операнд »
Не находит файла (одного или обоих) по указанному пути.

Отправлено: 22:54, 01-04-2011 | #14


Ветеран


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

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


С условием поиска не получается. Не могу прикрутить if exist. Опять сложный для меня цикл.
Код: Выделить весь код
@Echo Off
 SetLocal enabledelayedexpansion
set /A Cnt =0
for %%I in ("%AppData%\Opera\Opera\typed_history.xml") do set dirsize2=%%~zI
for %%I in ("%AppData%\Opera\Opera\global_history.dat") do set dirsize3=%%~zI
Set /A Cnt +=%dirsize2%
Set /A Cnt +=%dirsize3%
echo %Cnt%

Отправлено: 23:21, 01-04-2011 | #15


Аватара для gora

Ушёл из жизни


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

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


sov44, не удаляйте посты! Мой пост 14 выглядит как-то глупо, не находите?
Цитата sov44:
Опять сложный для меня цикл. »
Не в цикле дело, просто у Вас путь или имя файла написаны неправильно, я Оперу не использую и не могу проверить Ваши пути. Вот тест и он работает, с путями разберитесь самостоятельно.
Код: Выделить весь код
@Echo Off
for %%I in ("%Windir%\notepad.exe") do set dirsize2=%%~zI
Echo %dirsize2%
for %%I in ("%Windir%\regedit.exe") do set dirsize3=%%~zI
Echo %dirsize3%
Set /A Cnt +=dirsize2
Set /A Cnt +=dirsize3
echo %Cnt%
Pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:37, 01-04-2011 | #16


Ветеран


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

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


Цитата gora:
sov44, не удаляйте посты! Мой пост 14 выглядит как-то глупо, не находите? »
Прошу прощения. Учту на будущее.
Цитата gora:
у Вас путь или имя файла написаны неправильно »
Путь прописан правильно. Делаю скрипт по удалению мусора. Забыл написать, что сначала считается размер файла, потом файл удаляется. При повторном запуске скрипта ( файла уже нет) вполне логично выскакивает ошибка. Нужен цикл, чтобы сначала проверил наличие файла. Если он есть, то показать его размер и удалить его, если нет, то переходить дальше по скрипту.
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
set /A Cnt =0
for %%I in ("%AppData%\Opera\Opera\typed_history.xml") do set dirsize2=%%~zI
for %%I in ("%AppData%\Opera\Opera\global_history.dat") do set dirsize3=%%~zI
Set /A Cnt +=%dirsize2%
Set /A Cnt +=%dirsize3%
echo %Cnt%  
if exist "%AppData%\Opera\Opera\typed_history.xml" del "%AppData%\Opera\Opera\typed_history.xml"
if exist "%AppData%\Opera\Opera\global_history.dat" del "%AppData%\Opera\Opera\global_history.dat"
echo    Очистка истории в Opera               - OK           
pause

Последний раз редактировалось sov44, 02-04-2011 в 00:11.


Отправлено: 23:47, 01-04-2011 | #17


Ветеран


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

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


Цитата sov44:
Нужен цикл, чтобы сначала проверил наличие файла. »
Зачем цикл? Просто проверяйте, как уже у Вас есть ниже. Для получения размера можно вместо перебора «for» использовать «call», тем паче, что повторяемые действия следует выносить в процедуры:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set /a iSum = 0

call :CalcAndDel "%AppData%\Opera\Opera\typed_history.xml"
call :CalcAndDel "%AppData%\Opera\Opera\global_history.dat"

echo Total size: %iSum%

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
:CalcAndDel
	set sFile=%~1
	
	if defined sFile (
		if exist "%sFile%" (
			set /a iSum += %~z1
			echo del /f /q "%sFile%"
		) else (
			echo Not found file [%sFile%]
		)
	) else (
		echo Error call procedure: need argument ^<file^>
	)
	
	exit /b 0
rem ==========================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:55, 02-04-2011 | #18


Ветеран


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

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


Сейчас делаю проверку по условию наличия программы. Если есть программа, то считается размер кеша и чистит его, если нет, то ничего не считает и выводит сообщение с прочерками. Столкнулся с непонятным:
При установленной Опере если
Код: Выделить весь код
%programfiles%\Opera
без кавычек, кеш считается нормально. Если Оперу удалить, то появляются ошибки. Если поставить кавычки, то как и нужно при удалённой Опере появляется сообщение с прочерками, однако при установленной Опере опять ошибка.
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
Set Cnt=10
rem очистка временных файлов Opera
if exist %programfiles%\Opera (  
Set DirProg=%USERPROFILE%\Local Settings\Application Data\Opera\opera\cache
For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S ') Do ( 
 	If !flag!==1 Set dirsize1=%%c
  	If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
        )
Set /A Cnt +=%dirsize1%
PUSHD "%DirProg%"
2>Nul RD /S/Q "%DirProg%"
POPD
echo    Очистка временных файлов Opera                - OK   %dirsize1%  %Cnt%
        ) Else ( echo    Очистка временных файлов Opera                - --    )
Set kb=1024  Set /a mb=kb*kb, dirsizeMB=Cnt/mb, ostMB=Cnt%%mb*100/mb
echo.
echo.
echo       Очистка выполнена, всего удалено %dirsizeMB%,%ostMB% Мб
pause
ping 127.0.0.1 -n 8 > nul

Отправлено: 12:14, 03-04-2011 | #19


Аватара для gora

Ушёл из жизни


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

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


sov44
Кавычки для путей с пробелами здесь обязательны.
Переменные присваиваемые/изменяемые в блоке (скобки при проверке условия) далее в блоке нужно заключать в восклицательные знаки, а не в проценты, иначе их значение будет таким же как до входа в блок.

Оперы у меня нет, проверял на кеше IE в win7 :
Код: Выделить весь код
@Echo Off
SetLocal enabledelayedexpansion
Set Cnt=10
rem очистка временных файлов Opera
Set DirProg=c:\Users\gora\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5

if exist "%DirProg%" (  
	For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S ') Do ( 
	 	If !flag!==1 Set dirsize1=%%c
	  	If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
	        )
	Set /A Cnt +=dirsize1
	PUSHD "%DirProg%"
rem	2>Nul RD /S/Q "%DirProg%"
	POPD
	echo    Очистка временных файлов Opera                - OK   !dirsize1!  !Cnt!
) Else (echo    Очистка временных файлов Opera                - --    )
Set kb=1024
Set /a mb=kb*kb, dirsizeMB=Cnt/mb, ostMB=Cnt%%mb*100/mb
echo.
echo.
echo       Очистка выполнена, всего удалено %dirsizeMB%,%ostMB% Мб
pause
Не объединяйте строку
Код: Выделить весь код
Set kb=1024
со следующей строкой в одну, это разные строки.

Последний раз редактировалось gora, 03-04-2011 в 13:19.

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

Отправлено: 13:08, 03-04-2011 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование самого позднего по дате создания каталога. SANIOK_AV Скриптовые языки администрирования Windows 2 04-12-2009 17:29
Разное - [решено] удаление каталога с подкаталогами lud Microsoft Windows 2000/XP 2 02-07-2009 15:57
CMD/BAT - [решено] Поиск каталога и копирование всего его содержимого desk Скриптовые языки администрирования Windows 4 01-07-2009 14:28
Интерфейс - [решено] цвет шрифта каталога tref2me Microsoft Windows 2000/XP 4 07-06-2008 07:43
[решено] Идентификация каталога c помощью shell programmist72 Общий по Linux 14 13-11-2006 10:06




 
Переход