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

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

Ответить
Настройки темы
CMD/BAT - требуется найти разницу в размере папки до работы скрипта и после

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


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


Конфигурация

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


Здравствуйте! Собственно все написано в теме.
Нашел две программы выводящие размер папки, но не знаю как получить эти данные в виде переменной.

Disk Usage
https://technet.microsoft.com/en-us/.../bb896651.aspx
Код: Выделить весь код
Files:        109
Directories:  13
Size:         204а480а579 bytes
Size on disk: 204а745а120 bytes
Diruse
https://technet.microsoft.com/en-us/...99(WS.10).aspx
Код: Выделить весь код
Size  (b)  Files  Directory
204478577    109  SUB-TOTAL: C:\Z
204478577    109  TOTAL: C:\Z

Отправлено: 05:22, 24-01-2015

 

Ветеран


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

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


Prog-Man, лучше ни то, ни другое. Арифметика пакетных файлов целочисленна, 32-разрядна (один бит отнесён под знак) и посему крайне ограничена диапазоном от -2,147,483,648 до 2,147,483,647.

Вам под какие цели? Можно, например, использовать mshta и VBScript/JScript внутри, наподобие:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=E:\Песочница\0425

if exist "%sSourceFolder%\." (
	for /f "usebackq delims=" %%i in (
		`@"%systemroot%\system32\mshta.exe" "javascript:try {with(new ActiveXObject('Scripting.FileSystemObject')) {GetStandardStream(1).Write(GetFolder('%sSourceFolder:\=\\%').Size)}};catch (e){};close();"`
	) do set sPrevFolderSize=%%i
	
	echo Previously size [!sPrevFolderSize!].
	
	rem Здесь начинается Ваш код
	echo bla-bla-bla
	echo bla-bla-bla
	echo bla-bla-bla
	rem Здесь заканчивается Ваш код
	
	for /f "usebackq delims=" %%i in (
		`@"%systemroot%\system32\mshta.exe" "javascript:try {with(new ActiveXObject('Scripting.FileSystemObject')) {GetStandardStream(1).Write(GetFolder('%sSourceFolder:\=\\%').Size - !sPrevFolderSize!)}};catch (e){};close();"`
	) do set sDifference=%%i
	
	echo Difference after working is [!sDifference!].
) else (
	echo Can't find source folder [%sSourceFolder%].
	exit /b 1
)

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

Отправлено: 07:26, 24-01-2015 | #2



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

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


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


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

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


Вот мой скрипт(сильно не пинайте это мой первый скрипт).
Код: Выделить весь код
@echo off
cd %1

:: Инициализация Секундомера
:: http://forum.oszone.net/post-2275768-8.html
%USERPROFILE%\Desktop\Util\timemer my_backup start

:: Оптимизация JPG
:: jpegtran http://jpegclub.org/jpegtran/
if not exist %1\*.jpg if not exist %1\*.jpeg goto mp3
pause
md "%~1\OptimizedJPEGS"
for %%i in (*.jpg *.jpeg) do %USERPROFILE%\Desktop\Util\jpegtran.exe -optimize -progressive -copy none "%%i" "%~1\OptimizedJPEGS\%%i"
move /Y "%~1\OptimizedJPEGS\*.*" "%~1"
rd "%~1\OptimizedJPEGS"
:mp3

:: Оптимизация MP3
:: mp3packer 2.04
if not exist %1\*.mp3 goto gif
md "%~1\OptimizedMP3"
for %%i in (*.mp3) do %USERPROFILE%\Desktop\Util\mp3packer64.exe -f -z --workers 3 "%%i" "%~1\OptimizedMP3\%%i"
move /Y "%~1\OptimizedMP3\*.*" "%~1"
rd "%~1\OptimizedMP3"
:gif

:: Оптимизация GIF
:: gifsicle 1.87 9.Dec.2014 http://www.lcdf.org/gifsicle/
if not exist %1\*.gif goto bmp
for %%i in (*.gif) do %USERPROFILE%\Desktop\Util\gifsicle.exe -b -O3 "%%i"
:bmp

:: Конвертирование BMP в PNG
if not exist %1\*.bmp goto png
md "%~1\OptimizedBMP_PNG"
for %%i in (*.BMP) do "%USERPROFILE%\Desktop\Util\pngout.exe" "%%i" "%~1\OptimizedBMP_PNG\%%i"
move /Y "%~1\OptimizedBMP_PNG\*.*" "%~1"
rd "%~1\OptimizedBMP_PNG"
:png

:: Оптимизация PNG
:: PNGOUT http://advsys.net/ken/utils.htm
if not exist %1\*.png goto fin
for %%i in (*.png) do "%USERPROFILE%\Desktop\Util\pngout.exe" "%%i"
move /Y "%~1\OptimizedBMP_PNG\*.*" "%~1"
rd "%~1\OptimizedBMP_PNG"
md "%~1\defluff"
for %%i in (*.png) do %USERPROFILE%\Desktop\Util\defluff.exe <"%%i" > "%~1\defluff\%%i"
for %%i in (*.png) do "%USERPROFILE%\Desktop\Util\DeflOpt.exe" "%~1\defluff\%%i"
move /Y "%~1\defluff\*.*" "%~1"
rd "%~1\defluff"
:fin

:: Получаем время работы программы
%USERPROFILE%\Desktop\Util\timemer my_backup view
Pause
Если задать каталог вручную то все работает правильно, но как поступить в случае если каталог получается через
Код: Выделить весь код
cd %1

Последний раз редактировалось Prog-Man, 29-01-2015 в 14:57.


Отправлено: 08:47, 24-01-2015 | #3


Ветеран


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

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


Замените:
Код: Выделить весь код
set sSourceFolder=E:\Песочница\0425
на:
Код: Выделить весь код
set sSourceFolder=%~1

if not defined sSourceFolder (
	echo Usage: %~nx0 ^<Source folder^>
	exit /b 2
)
и далее, в том числе и в своём коде, используйте «%sSourceFolder%» вместо «%1».
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:17, 24-01-2015 | #4


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


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

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


Код: Выделить весь код
::@echo off
cd %1
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%~1

if not defined sSourceFolder (
	echo Usage: %~nx0 ^<Source folder^>
	exit /b 2
)

:: Где то после этого момента вылетает
if exist "%sSourceFolder%\." (
	for /f "usebackq delims=" %%i in (
		`@"%systemroot%\system32\mshta.exe" "javascript:try {with(new ActiveXObject('Scripting.FileSystemObject')) {GetStandardStream(1).Write(GetFolder('%sSourceFolder:\=\\%').Size)}};catch (e){};close();"`
	) do set sPrevFolderSize=%%i
	
	echo Previously size [!sPrevFolderSize!].
Цитата Iska:
в том числе и в своём коде, используйте «%sSourceFolder%» вместо «%1». »
%~1 тоже заменить?

Отправлено: 09:43, 24-01-2015 | #5


Ветеран


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

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


Вместо «cd %1» должно быть «cd /d "%sSourceFolder%"». И не в начале пакетного файла, а в том месте, где зелёным по голубому написано «Здесь начинается Ваш код»/«Здесь заканчивается Ваш код».

Цитата Prog-Man:
:: Где то после этого момента вылетает »
До или после вывода «Previously size […].»? Как именно «вылетает»?

Цитата Prog-Man:
%~1 тоже заменить? »
Да.

Отправлено: 10:09, 24-01-2015 | #6


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


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

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


Цитата Iska:
До или после вывода «Previously size […].»? Как именно «вылетает»? »
Закрывается до вывода «Previously size […].»

Отправлено: 10:28, 24-01-2015 | #7


Ветеран


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

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


Ух. Покажите получившийся у Вас код.

Отправлено: 10:55, 24-01-2015 | #8


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


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

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


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

set sSourceFolder=%~1

if not defined sSourceFolder (
	echo Usage: %~nx0 ^<Source folder^>
	exit /b 2
)

if exist "%sSourceFolder%\." (
	for /f "usebackq delims=" %%i in (
		`@"%systemroot%\system32\mshta.exe" "javascript:try {with(new ActiveXObject('Scripting.FileSystemObject')) {GetStandardStream(1).Write(GetFolder('%sSourceFolder:\=\\%').Size)}};catch (e){};close();"`
	) do set sPrevFolderSize=%%i
	
	echo Previously size [!sPrevFolderSize!].
	

cd /d "%sSourceFolder%"
:: Инициализация Секундомера
:: http://forum.oszone.net/post-2275768-8.html
%USERPROFILE%\Desktop\Util\timemer my_backup start

:: Оптимизация JPG
:: jpegtran http://jpegclub.org/jpegtran/
if not exist %sSourceFolder%\*.jpg if not exist %sSourceFolder%\*.jpeg goto mp3
pause
md "%sSourceFolder%\OptimizedJPEGS"
for %%i in (*.jpg *.jpeg) do %USERPROFILE%\Desktop\Util\jpegtran.exe -optimize -progressive -copy none "%%i" "%sSourceFolder%\OptimizedJPEGS\%%i"
move /Y "%sSourceFolder%\OptimizedJPEGS\*.*" "%sSourceFolder%"
rd "%sSourceFolder%\OptimizedJPEGS"
:mp3

:: Оптимизация MP3
:: mp3packer 2.04
if not exist %sSourceFolder%\*.mp3 goto gif
md "%sSourceFolder%\OptimizedMP3"
for %%i in (*.mp3) do %USERPROFILE%\Desktop\Util\mp3packer64.exe -f -z --workers 3 "%%i" "%sSourceFolder%\OptimizedMP3\%%i"
move /Y "%sSourceFolder%\OptimizedMP3\*.*" "%sSourceFolder%"
rd "%sSourceFolder%\OptimizedMP3"
:gif

:: Оптимизация GIF
:: gifsicle 1.87 9.Dec.2014 http://www.lcdf.org/gifsicle/
if not exist %sSourceFolder%\*.gif goto bmp
for %%i in (*.gif) do %USERPROFILE%\Desktop\Util\gifsicle.exe -b -O3 "%%i"
:bmp

:: Конвертирование BMP в PNG
if not exist %sSourceFolder%\*.bmp goto png
md "%sSourceFolder%\OptimizedBMP_PNG"
for %%i in (*.BMP) do "%USERPROFILE%\Desktop\Util\pngout.exe" "%%i" "%sSourceFolder%\OptimizedBMP_PNG\%%i"
move /Y "%sSourceFolder%\OptimizedBMP_PNG\*.*" "%sSourceFolder%"
rd "%sSourceFolder%\OptimizedBMP_PNG"
:png

:: Оптимизация PNG
:: PNGOUT http://advsys.net/ken/utils.htm
if not exist %sSourceFolder%\*.png goto fin
for %%i in (*.png) do "%USERPROFILE%\Desktop\Util\pngout.exe" "%%i"
move /Y "%sSourceFolder%\OptimizedBMP_PNG\*.*" "%sSourceFolder%"
rd "%sSourceFolder%\OptimizedBMP_PNG"
md "%sSourceFolder%\defluff"
for %%i in (*.png) do %USERPROFILE%\Desktop\Util\defluff.exe <"%%i" > "%sSourceFolder%\defluff\%%i"
move /Y "%sSourceFolder%\defluff\*.*" "%sSourceFolder%"
rd "%sSourceFolder%\defluff"
for %%i in (*.png) do "%USERPROFILE%\Desktop\Util\DeflOpt.exe" "%%i"
:fin

:: Получаем время работы программы
%USERPROFILE%\Desktop\Util\timemer my_backup view
	
	for /f "usebackq delims=" %%i in (
		`@"%systemroot%\system32\mshta.exe" "javascript:try {with(new ActiveXObject('Scripting.FileSystemObject')) {GetStandardStream(1).Write(GetFolder('%sSourceFolder:\=\\%').Size - !sPrevFolderSize!)}};catch (e){};close();"`
	) do set sDifference=%%i
	
	echo Difference after working is [!sDifference!].
) else (
	echo Can't find source folder [%sSourceFolder%].
	exit /b 1
)

endlocal
exit /b 0

Отправлено: 10:58, 24-01-2015 | #9


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


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

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


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

set sSourceFolder=E:\Песочница\0425

if exist "%sSourceFolder%\." (
	for /f "usebackq delims=" %%i in (
		`@"%systemroot%\system32\mshta.exe" "javascript:try {with(new ActiveXObject('Scripting.FileSystemObject')) {GetStandardStream(1).Write(GetFolder('%sSourceFolder:\=\\%').Size)}};catch (e){};close();"`
	) do set sPrevFolderSize=%%i
	
	echo Previously size [!sPrevFolderSize!].
	
	rem Здесь начинается Ваш код
	echo bla-bla-bla
	echo bla-bla-bla
	echo bla-bla-bla
	rem Здесь заканчивается Ваш код
	
	for /f "usebackq delims=" %%i in (
		`@"%systemroot%\system32\mshta.exe" "javascript:try {with(new ActiveXObject('Scripting.FileSystemObject')) {GetStandardStream(1).Write(GetFolder('%sSourceFolder:\=\\%').Size - !sPrevFolderSize!)}};catch (e){};close();"`
	) do set sDifference=%%i
	
	echo Difference after working is [!sDifference!].
) else (
	echo Can't find source folder [%sSourceFolder%].
	exit /b 1
)

endlocal
exit /b 0
Самое интересное, что даже этот скрипт стал закрываться

Отправлено: 05:52, 25-01-2015 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Задать время работы скрипта с 15:00 до 2:00 HFShak AutoIt 1 28-03-2014 16:20
Приостановка работы скрипта до нажатия кнопки в программе Pependos AutoIt 0 01-10-2010 02:52
Разное - После апгрейда с XP до Vista оказались две папки Documents - какой пользоваться kefi Microsoft Windows Vista 1 16-02-2010 13:07
[решено] Требуется описание скрипта проверки подключения к сети Optimus AutoIt 5 03-12-2009 00:28
Требуется настроить выполнение sh скрипта на unix через определеный промежуток времен backgam Программирование в *nix 8 05-05-2009 18:15




 
Переход