Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] определить общий размер удалённых файлов скриптом (http://forum.oszone.net/showthread.php?t=337865)

palexa 23-11-2018 20:59 2842315

определить общий размер удалённых файлов скриптом
 
Привет

Есть скрипт на cmd, для удаления хлама из директорий пользователей

Код:

for /f "delims=" %%i in ('dir "\\ts7\c$\users\*" /a:d /b') do (
rem pushd "\\ts7\C$\Users\%%i\AppData\Local\Google\Chrome\User Data\Default\Cache"
rem rmdir /s /q "\\ts7\C$\Users\%%i\AppData\Local\Google\Chrome\User Data\Default\Cache"
del /s /q "\\ts7\C$\Users\%%i\AppData\Local\Google\Chrome\User Data\Default\Cache\*"
del /s /q "\\ts7\c$\Users\%%i\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO\*"
del /s /q "\\ts7\C$\Users\%%i\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\*"
del /s /q "\\ts7\c$\Users\%%i\AppData\Local\Microsoft\Windows\WER\*"
del /s /q "\\ts7\c$\Users\%%i\AppData\Local\Microsoft\Windows\Explorer\*"
del /s /q "\\ts7\c$\Users\%%i\AppData\Local\Temp\*"
del /s /q "\\ts7\c$\Users\%%i\Downloads\*"
)
pause

Помогите пожалуйста сделать так, что бы в конце был ответ сколько МБ было удалено
Если это конечно возможно и не сильно повлияет на скорость выполнения скрипта

Iska 23-11-2018 21:53 2842318

Теоретически — можно. Практически — не имеет смысла сим заморачиваться. Это не WSH и не PoSH.

palexa 23-11-2018 22:10 2842321

Приходится сначала смотреть место на диске, потом чистить и опять смотреть место, что бы сказать шефу сколько очистилось.
Жутко неудобно

ну не имеет так не имеет

Iska 23-11-2018 22:49 2842324

palexa, дело в том, что нет в пакетных файлах простого и незатейливого способа для осуществления озвученного (в отличие от WSH/PoSH).

palexa 23-11-2018 22:54 2842325

я понял это, спасибо

megaloman 24-11-2018 00:47 2842331

palexa,
Гибрид bat и js.
Код:

@set @E=1; /*

@Echo Off
        Set "Drive=E"

copy E:\testfile.pdf E:\zzzzzzzzzzzzzzz >nul

        FOR /F "usebackq delims=" %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 0`) DO Set "N_Min=%%n"

del E:\zzzzzzzzzzzzzzz

        FOR /F "usebackq delims= " %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 0`) DO Set "N_Max=%%n"
        FOR /F "usebackq delims= " %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 1 %N_Max% %N_Min% 2`) DO Set "Delta=%%n"

        Echo %N_Max%
        Echo %N_Min%
        Echo %Delta%
GoTo :Eof
*/

// Arg 1 = Drive
// Arg 2 = 0 Echo Free space of drive
// Arg 2 = 1
// Arg 3 =Space1
// Arg 4 =Space2
// Arg 5 =0(Byte) 1(Kbyte) 2(Mbyte) 3(Gbyte)

var i;
var oArg = WScript.Arguments;

var nArg=oArg.Count();
if (nArg<2) {
        WScript.Echo("Error!_Invalid_number_of_arguments!");
        WScript.Quit(1);
}

if (oArg(1)==0){
        var FSO=WScript.CreateObject("Scripting.FileSystemObject");
        try {var D=FSO.GetDrive(oArg(0)+":")}
        catch (e) {
                if (e != 0) {
                        WScript.Echo("Error!_" + oArg(0) + ":_not_exist!");
                        WScript.Quit(2);
                }
        }
        WScript.Echo(D.FreeSpace);
        WScript.Quit(0);
}

if (oArg(1)==1){
        if (nArg<5) {
                WScript.Echo("Error!_Invalid_number_of_arguments!");
                WScript.Quit(1);
        }
        var D=oArg(2)-oArg(3);
        if (oArg(4)==0) {WScript.Echo(D);WScript.Quit(0)}
        if (oArg(4)==1) {WScript.Echo(Math.round(D/1024));WScript.Quit(0)}
        if (oArg(4)==2) {WScript.Echo(Math.round(D/1024/1024));WScript.Quit(0)}
        if (oArg(4)==3) {WScript.Echo(Math.round(D/1024/1024/1024));WScript.Quit(0)}
        WScript.Echo("Error!_Wrong_argument_of_size!");
        WScript.Quit(3);
}

Первый и второй вызов в For - свободное место на указанном диске
третий вызов - калькулятор разности двух чисел
Приходится привлекать для этого js, так как в cmd с большими числами работать затруднительно
В приведенном примере перед первым вызовом копируется тестовый файл,
после первого - его удаление
после третего - разность второго и первого
Если надо сетевой путь
Код:

@set @E=1; /*

@Echo Off
        Set "NetPath=\\Server\Test1"
        Pushd "%NetPath%" || (
                Echo Wrong path "%NetPath%"
                Pause
                GoTo :Eof
        )
        FOR /F "usebackq delims=:" %%n IN (`cd`) DO Set "Drive=%%n"

copy E:\Test.pdf %Drive%:\zzzzzzzzzzzzzzz >nul

        FOR /F "usebackq delims=" %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 0`) DO Set "N_Min=%%n"

del %Drive%:\zzzzzzzzzzzzzzz

        FOR /F "usebackq delims= " %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 0`) DO Set "N_Max=%%n"
        FOR /F "usebackq delims= " %%n IN (`2^>nul Cscript //NoLogo /E:jscript "%~dpnx0" "%Drive%" 1 %N_Max% %N_Min% 1`) DO Set "Delta=%%n"

        Popd

        Echo %N_Max%
        Echo %N_Min%
        Echo %Delta%
GoTo :Eof
*/


Iska 24-11-2018 01:49 2842335

Цитата:

Цитата megaloman
Гибрид bat и js. »

Кстати, да!

Busla 24-11-2018 10:52 2842360

Цитата:

Цитата palexa
Приходится сначала смотреть место на диске, потом чистить и опять смотреть место, что бы сказать шефу сколько очистилось. »

1. я вас удивлю, но занятое место как правило больше суммарного объёма файлов
2. какая-то регулярная профилактика - дело благое, но то, что вы делаете - профанация: кэши браузеров разрастутся обратно. В загрузках обычно лежит то, что нужно пользователю - вы бы ещё Рабочий стол "почистили". Хотя бы отбивку по времени сделайте.

DJ Mogarych 24-11-2018 12:01 2842368

Код:

robocopy [какая-то пустая папка] [папка с мусором] /e /purge /log+:[файл журнала]
В отчёте будет написано, сколько удалено. Далее можно крутить как угодно - слать отчёт по почте, фильтровать строки и т. п.

palexa 24-11-2018 12:17 2842371

Что то я сильно перемудрил с задачей

Ведь по сути мне надо знать, то что написано на диске до и после выполнения чистки, когда открываешь "Мой компьютер"

А там написано до:
30ГБ свободно из 400ГБ

После
50ГБ свободно из 400ГБ

Как бы вот оно

Код:

@echo off
chcp 1251 > nul
for /f "tokens=3 delims= " %%A in ('dir /s/-c ^|find "байт свободно"') do (
echo free: %%A
)
chcp 866 > nul
pause

А мне надо по сети "\\ts7\C$\

Iska 24-11-2018 12:40 2842376

Цитата:

Цитата palexa
А мне надо по сети "\\ts7\C$\ »

Про то и речь.

palexa 24-11-2018 12:53 2842379

Оказалось для выполнения скрипта на серваке не хватает прав (даже от имени администратора)
Результат не показывает
Бред какой то. Намутили что то

Ладно, спасибо

megaloman 24-11-2018 20:48 2842428

palexa,
Если размер измерять в миллионах байт а не мегабайтах, то вот чистый батник:
Код:

@Echo Off
cls
        Set "NetPath=\\ts7\c$\users"
        Pushd "%NetPath%" || (
                Echo Wrong path "%NetPath%"
                Pause
                GoTo :Eof
        )
        FOR /F "usebackq delims=\" %%n IN (`cd`) DO Set "Drive=%%n"

        FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk where caption="%Drive%" Get FreeSpace,Size,VolumeName"`) DO If Not "%%j"=="" (Set "FreeSpace=%%i" &Set "Size=%%j")
        Set "Size1=%Size%" &        Set "FreeSpace1=%FreeSpace%"

        For /f "delims=" %%i in ('2^>nul Dir %Drive%\ /a:d /b') Do (
                del /s /q "%Drive%\%%i\AppData\Local\Google\Chrome\User Data\Default\Cache\*"
                del /s /q "%Drive%\%%i\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO\*"
                del /s /q "%Drive%\%%i\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\*"
                del /s /q "%Drive%\%%i\AppData\Local\Microsoft\Windows\WER\*"
                del /s /q "%Drive%\%%i\AppData\Local\Microsoft\Windows\Explorer\*"
                del /s /q "%Drive%\%%i\AppData\Local\Temp\*"
                del /s /q "%Drive%\%%i\Downloads\*"
        )

        FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk where caption="%Drive%" Get FreeSpace,Size,VolumeName"`) DO If Not "%%j"=="" (Set "FreeSpace=%%i" &Set "Size=%%j")
        Set "Size2=%Size%" &Set "FreeSpace2=%FreeSpace%"

        Popd
       
        Echo Size2=%Size2%  FreeSpace2=%FreeSpace2%
        Echo Size1=%Size1%  FreeSpace1=%FreeSpace1%
       
        Set "Size=%Size1:~0,-6%" &If "%Size%"=="" Set /A Size=0
        Set "FreeSpace2=%FreeSpace2:~0,-6%" &If "%FreeSpace2%"=="" Set /A FreeSpace2=0
        Set "FreeSpace1=%FreeSpace1:~0,-6%" &If "%FreeSpace1%"=="" Set /A FreeSpace1=0

        Set /A Delta=%FreeSpace2%-%FreeSpace1%
        Echo Size=%Size%  Released=%FreeSpace2%-%FreeSpace1%=%Delta%
Pause
GoTo :Eof

Попробуйте.

palexa 24-11-2018 21:58 2842436

Спасибо, но думаю что то у меня с правами не так. Возможно не стоит этим заниматься.
Код:

Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный путь.
Не удалось найти указанный файл.
Size2=207799447552  FreeSpace2=63998238720
Size1=207799447552  FreeSpace1=63998238720
Size=207799  Released=63998-63998=0
Press any key to continue . . .

Что есть что не понятно
Код:

Size2=207799447552  FreeSpace2=63998238720
Size1=207799447552  FreeSpace1=63998238720
Size=207799  Released=63998-63998=0


palexa 24-11-2018 23:36 2842449

Вложений: 1
Цифры не понятные

megaloman 25-11-2018 00:02 2842455

palexa, 80685862912/1024/1024/1024=75.1Г
208197906432/1024/1024/1024=194Г, несовпадение в последней цифре - ошибки округления
То есть объем определяется верно
Надо разбираться с удалением.
Может, в пути возникает имя с символами, не предусмотренные 866 кодировкой.
Для отладки измените код перед каждым del
>>с:\outfile.txt 2>&1 echo del ..........
Приложите получившийся файл к сообщению

palexa 25-11-2018 00:13 2842458

возможно, но и удалять пока нечего. Я уже всё удалил :) Суббота, воскресенье

mwz 25-11-2018 00:31 2842462

Цитата:

Цитата megaloman
Set "NetPath=\\ts7\c$\users" »

Не имеет ли смысл ли заменить сетевой путь на диск, например, Z:, командой net use Z: \\ts7\c$\users ?

palexa 25-11-2018 00:51 2842464

Вложений: 1
Скопировал, не удаляется

palexa 25-11-2018 00:56 2842465

Цитата:

Цитата mwz
Не имеет ли смысл ли заменить сетевой путь на диск, например, Z:, командой net use Z: \\ts7\c$\users ? »

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

megaloman 25-11-2018 01:02 2842466

mwz,
Цитата:

Не имеет ли смысл ли заменить сетевой путь на диск, например, Z:, командой net use Z: \\ts7\c$\users
А что в принципе изменится? После pushd мы присваиваем указанной папке букву диска (наманер net use или substr)
Вроде бы отрабатывает (во первых, при отладке делал echo %Drive%, во вторых, отработал правильно wmic: картиночка от palexa это подтвердила )
Уж если и танцевать с бубном, то, наверное, в for и del лучше оставить полные сетевые пути.

palexa 25-11-2018 01:02 2842467

Для меня если честно подход админов какой то дикий
Я был системным админом, я вообще не заморачивался
Для каждого были квоты
Для браузера был размер установлен размер кеша
cron в линуксе выполнял всё что надо
и так далее, никто не мог выйти за рамки
Но увы, пришёл в колхоз, должен играть по правилам админа

megaloman 25-11-2018 01:11 2842468

palexa, а уберите Вы мой for co всеми del и вставьте свой кусок из самого первого поста. Он, кстати, рабочий? Удаляет?
Если он рабочий, мои выкрутасы с определением места никак на него не повлияют

palexa 25-11-2018 01:18 2842469

Цитата:

Цитата megaloman
Он, кстати, рабочий? Удаляет? »

рабочий, удаляет. проверял

Завтра проверю, потому что устал и буквы расплываются

Iska 25-11-2018 01:20 2842470

Цитата:

Цитата mwz
Не имеет ли смысл ли заменить сетевой путь на диск, например, Z:, командой net use Z: \\ts7\c$\users ? »

Так коллега megaloman как раз меняет — посредством pushd. Иначе %cd% давало бы не те результаты, что ожидалось.

YuS_2 25-11-2018 10:13 2842481

Цитата:

Цитата megaloman
Если размер измерять в миллионах байт а не мегабайтах, то вот чистый батник »

не забываем только, что в cmd оперировать можно только числами int32... т.е. от -2147483647 до 2147483647
Код:

set /a res=2147483647+1
т.е. по сути до 2Gb, не более того...

Добавлено:
Понятно, что для обхода этой проблемы и откидываются шесть знаков. Но насколько это корректно? Учитывая, что из байтов мегабайты так не получить, ибо немного соответствие другое ...


Цитата:

Цитата palexa
Я просто хочу немного автоматизировать свою работу »

Powershell присутствует? Вот его лучше уже применять, ибо возможности в целом несоизмеримы...

palexa 25-11-2018 12:34 2842492

Вложений: 1
Цитата:

Цитата megaloman
уберите Вы мой for co всеми del и вставьте свой кусок из самого первого поста »



Код:

@Echo Off
cls
        Set "NetPath=\\ts7\c$\users"
        Pushd "%NetPath%" || (
                Echo Wrong path "%NetPath%"
                Pause
                GoTo :Eof
        )
        FOR /F "usebackq delims=\" %%n IN (`cd`) DO Set "Drive=%%n"

        FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk where caption="%Drive%" Get FreeSpace,Size,VolumeName"`) DO If Not "%%j"=="" (Set "FreeSpace=%%i" &Set "Size=%%j")
        Set "Size1=%Size%" &        Set "FreeSpace1=%FreeSpace%"

        for /f "delims=" %%i in ('dir "\\ts7\c$\users\*" /a:d /b') do (
rem pushd "\\ts7\C$\Users\%%i\AppData\Local\Google\Chrome\User Data\Default\Cache"
rem rmdir /s /q "\\ts7\C$\Users\%%i\AppData\Local\Google\Chrome\User Data\Default\Cache"
del /s /q "\\ts7\C$\Users\%%i\AppData\Local\Google\Chrome\User Data\Default\Cache\*"
del /s /q "\\ts7\c$\Users\%%i\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO\*"
del /s /q "\\ts7\C$\Users\%%i\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\*"
del /s /q "\\ts7\c$\Users\%%i\AppData\Local\Microsoft\Windows\WER\*"
del /s /q "\\ts7\c$\Users\%%i\AppData\Local\Microsoft\Windows\Explorer\*"
del /s /q "\\ts7\c$\Users\%%i\AppData\Local\Temp\*"
del /s /q "\\ts7\c$\Users\%%i\Downloads\*"
)

        FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk where caption="%Drive%" Get FreeSpace,Size,VolumeName"`) DO If Not "%%j"=="" (Set "FreeSpace=%%i" &Set "Size=%%j")
        Set "Size2=%Size%" &Set "FreeSpace2=%FreeSpace%"

        Popd
       
        Echo Size2=%Size2%  FreeSpace2=%FreeSpace2%
        Echo Size1=%Size1%  FreeSpace1=%FreeSpace1%
       
        Set "Size=%Size1:~0,-6%" &If "%Size%"=="" Set /A Size=0
        Set "FreeSpace2=%FreeSpace2:~0,-6%" &If "%FreeSpace2%"=="" Set /A FreeSpace2=0
        Set "FreeSpace1=%FreeSpace1:~0,-6%" &If "%FreeSpace1%"=="" Set /A FreeSpace1=0

        Set /A Delta=%FreeSpace2%-%FreeSpace1%
        Echo Size=%Size%  Released=%FreeSpace2%-%FreeSpace1%=%Delta%
Pause
GoTo :Eof


palexa 25-11-2018 15:04 2842521

По предыдущему посту видно, что хлам удаляется и размер считается верно, попробовал на нескольких серверах, полёт нормальный

Эти результаты
Echo Size2=%Size2% FreeSpace2=%FreeSpace2%
Echo Size1=%Size1% FreeSpace1=%FreeSpace1%

Можно сразу поделить на / 1024 / 1024 / 1024 и отправить в файл ?
В ГБ как то нагляднее смотрится

Числа ограничены 32 битами точности. Жаль, ну ладно

megaloman 25-11-2018 15:54 2842532

palexa,
Цитата:

Цитата palexa
Можно сразу поделить на / 1024 / 1024 / 1024 и отправить в файл »

- Нельзя, ограничение разрядности чисел в CMD. Вообще-то Вы заказывали мегабайты, я сделал миллионы байт. Я придумал, как с хорошей точностью перейти от миллионов байт к мегабайтам. И уже мегабайты свести к гигабайтам делением на 1024
Пробуйте, пишите
Код:

@Echo Off
cls
        Set "NetPath=\\ts7\C$\Users"
        Pushd "%NetPath%" || (
                Echo Wrong path "%NetPath%"
                Pause
                GoTo :Eof
        )
        FOR /F "usebackq delims=\" %%n IN (`cd`) DO Set "Drive=%%n"

        FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk where caption="%Drive%" Get FreeSpace,Size,VolumeName"`) DO If Not "%%j"=="" (Set "FreeSpace=%%i" &Set "Size=%%j")
        Set "Size1=%Size%" &        Set "FreeSpace1=%FreeSpace%"

        for /f "delims=" %%i in ('dir "%NetPath%\*" /a:d /b') do (
                del /s /q "%NetPath%\%%i\AppData\Local\Google\Chrome\User Data\Default\Cache\*"
                del /s /q "%NetPath%\%%i\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO\*"
                del /s /q "%NetPath%\%%i\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\*"
                del /s /q "%NetPath%\%%i\AppData\Local\Microsoft\Windows\WER\*"
                del /s /q "%NetPath%\%%i\AppData\Local\Microsoft\Windows\Explorer\*"
                del /s /q "%NetPath%\%%i\AppData\Local\Temp\*"
                del /s /q "%NetPath%\%%i\Downloads\*"
        )

        FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk where caption="%Drive%" Get FreeSpace,Size,VolumeName"`) DO If Not "%%j"=="" (Set "FreeSpace=%%i" &Set "Size=%%j")
        Set "Size2=%Size%" &Set "FreeSpace2=%FreeSpace%"

        Popd
       
        Set "Space=              "
        Set "S0=%Space%%Size2%" &Set "S2=%Space%%FreeSpace2%" &Set "S1=%Space%%FreeSpace1%"

        Echo %S0:~-15% byte  =Total size
        Echo %S1:~-15% byte  =Free space before releasing
        Echo %S2:~-15% byte  =Free space  after releasing

        Set "S0M=%Size1:~0,-6%"
        If "%S0M%"=="" (Set /A S0M=0) Else (Set /A S0M=%S0M%-%S0M%/20)
        Set "S2M=%FreeSpace2:~0,-6%"
        If "%S2M%"=="" (Set /A S2M=0) Else (Set /A S2M=%S2M%-%S2M%/20)
        Set "S1M=%FreeSpace1:~0,-6%"
        If "%S1M%"=="" (Set /A S1M=0) Else (Set /A S1M=%S1M%-%S1M%/20)

        Set /A Delta=%S2M%-%S1M%

        Set "S0=%Space%%S0M%" &Set "S2=%Space%%S2M%" &Set "S1=%Space%%S1M%" &Set "SD=%Space%%Delta%"

        Echo %S0:~-9% Mbyte  =Total size
        Echo %S2:~-9% Mbyte  =Free space  after releasing
        Echo %S1:~-9% Mbyte  =Free space before releasing
        Echo %SD:~-9% Mbyte  =Space released
       
        Set /A S0G=%S0M%/1024, S1G=%S1M%/1024, S2G=%S2M%/1024, Delta=%Delta%/1024
        Set "S0=%Space%%S0G%" &Set "S2=%Space%%S2G%" &Set "S1=%Space%%S1G%" &Set "SD=%Space%%Delta%"

        Echo %S0:~-6% Gbyte  =Total size
        Echo %S2:~-6% Gbyte  =Free space  after releasing
        Echo %S1:~-6% Gbyte  =Free space before releasing
        Echo %SD:~-6% Gbyte  =Space released
Pause
GoTo :Eof

Думаю, записать в файл нужные строки не составит труда

palexa 25-11-2018 16:25 2842541

Думаю с точностью мы не угадаем, так что лучше пусть пока будет в байтах, а там посмотрим

429390819328 byte =Total size
398 Gbyte =Total size

429390819328 / 1024 / 1024 /1024 = 399.901 Gbyte

megaloman, Спасибо, за помощь.

megaloman 25-11-2018 16:48 2842546

palexa, Я не гадаю с точностью.
1000*1000=1000000
1024*1024=1048576
То есть отличие составляет ~5% (то есть 1/20 часть от результата)
В CMD нет дробей. Поэтому, если я из миллионов байт получаю мегабайты путём:
млн-млн/20
Погрешность результата составляет 0.2%
Покажите, как отработал вывод в моём последнем варианте. Интересно посравнивать числа при ручных подсчетах и то, что я выдаю

palexa 25-11-2018 16:59 2842547

392690659328 byte =Total size
96284807168 byte =Free space before releasing
96756871168 byte =Free space after releasing

373056 Mbyte =Total size
91919 Mbyte =Free space after releasing
91470 Mbyte =Free space before releasing
449 Mbyte =Space released

364 Gbyte =Total size
89 Gbyte =Free space after releasing
89 Gbyte =Free space before releasing
0 Gbyte =Space released

palexa 25-11-2018 17:05 2842549

Вложений: 1
Скрин после очистки

palexa 25-11-2018 17:59 2842557

Вот скрин на всякий случай до и после


207799447552 byte =Total size
92909678592 byte =Free space before releasing
95596863488 byte =Free space after releasing
-
197410 Mbyte =Total size
90817 Mbyte =Free space after releasing
88264 Mbyte =Free space before releasing
2553 Mbyte =Space released
-
192 Gbyte =Total size
88 Gbyte =Free space after releasing
86 Gbyte =Free space before releasing
2 Gbyte =Space released

palexa 25-11-2018 20:44 2842582

Если сервер не найден, то пишет

Сетевой путь не найден.
Wrong path "\\ts7\C$\Users"
Press any key to continue . . .

Как этого избежать, что бы в этом случае батник показал инфу и закрылся
Если я правильно понял закоментровать
Echo Wrong path "%NetPath%"
rem Pause

(а ещё лучше записал эту инфу в указанный файл)

megaloman 25-11-2018 21:45 2842588

palexa, Вы как-то помянули несколько серверов. Учел. Можете прописать несколько серверов (или один).
Кроме того, решил вернуться к гибриду cmd+js. На js написан калькулятор пересчета. Получаем правильные числа.
Показал возможность формирования log-файла. Сейчас в имени датавремя запуска файла Z:\ГГГГММДДччммсс.log (пропишите свой диск). Можете придумать другое имя.
Закомментируйте вывод результатов, которые Вам не интересны.
Пробуйте, пишите
Код:

@set @E=1; /*

@Echo Off
cls
        Set NetPath="\\Server1\c$\users" "\\ts7\C$\Users" "\\Server2\c$\users"

        FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d"
        Set "LogFile=Z:\%@Tdate:~0,14%.log"

        >"%LogFile%" 2>&1 (FOR %%p IN (%NetPath%) DO (
                Call :ProtoDel "%%~p"
        ))

rem        FOR %%p IN (%NetPath%) DO (
rem                Call :ProtoDel "%%~p"
rem        )
rem Pause
GoTo :Eof

:ProtoDel
        Echo ++++++++++ %Date% %Time% "%~1"
        Pushd "%~1" || (
                Echo Wrong path "%~1"
                GoTo :Eof
        )
        FOR /F "usebackq delims=\" %%n IN (`cd`) DO Set "Drive=%%n"

        FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk where caption="%Drive%" Get FreeSpace,Size,VolumeName"`) DO If Not "%%j"=="" (Set "FreeSpace=%%i" &Set "Size=%%j")
        Set "Size1=%Size%" &        Set "FreeSpace1=%FreeSpace%"

        for /f "delims=" %%i in ('dir "%~1\*" /a:d /b') do (
                >nul 2>&1 del /s /q "%~1\%%i\AppData\Local\Google\Chrome\User Data\Default\Cache\*"
                >nul 2>&1 del /s /q "%~1\%%i\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.MSO\*"
                >nul 2>&1 del /s /q "%~1\%%i\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.Outlook\*"
                >nul 2>&1 del /s /q "%~1\%%i\AppData\Local\Microsoft\Windows\WER\*"
                >nul 2>&1 del /s /q "%~1\%%i\AppData\Local\Microsoft\Windows\Explorer\*"
                >nul 2>&1 del /s /q "%~1\%%i\AppData\Local\Temp\*"
                >nul 2>&1 del /s /q "%~1\%%i\Downloads\*"
        )

        FOR /F "usebackq tokens=1,2 delims= " %%i IN (`"wmic logicaldisk where caption="%Drive%" Get FreeSpace,Size,VolumeName"`) DO If Not "%%j"=="" (Set "FreeSpace=%%i" &Set "Size=%%j")
        Set "Size2=%Size%" &Set "FreeSpace2=%FreeSpace%"

        Popd
       
        Set "Space=              "
        Call :SizeDiff 0 0 %FreeSpace1% %FreeSpace2% "Delta"

        Set "S0=%Space%%Size2%" &Set "S2=%Space%%FreeSpace2%" &Set "S1=%Space%%FreeSpace1%" &Set "SD=%Space%%Delta%"

        Echo %S0:~-15% byte  =Total size
        Echo %S1:~-15% byte  =Free space before releasing
        Echo %S2:~-15% byte  =Free space  after releasing
        Echo %SD:~-15% byte  =Space released

        Call :Size 2 1 %Size1% "S0M"
        Call :Size 2 1 %FreeSpace2% "S2M"
        Call :Size 2 1 %FreeSpace1% "S1M"
        Call :SizeDiff 2 1 %FreeSpace1% %FreeSpace2% "Delta"

        Set "S0=%Space%%S0M%" &Set "S2=%Space%%S2M%" &Set "S1=%Space%%S1M%" &Set "SD=%Space%%Delta%"

        Echo %S0:~-9% Mbyte  =Total size
        Echo %S2:~-9% Mbyte  =Free space  after releasing
        Echo %S1:~-9% Mbyte  =Free space before releasing
        Echo %SD:~-9% Mbyte  =Space released

        Call :Size 3 2 %Size1% "S0G"
        Call :Size 3 2 %FreeSpace2% "S2G"
        Call :Size 3 2 %FreeSpace1% "S1G"
        Call :SizeDiff 3 2 %FreeSpace1% %FreeSpace2% "Delta"
       
        Set "S0=%Space%%S0G%" &Set "S2=%Space%%S2G%" &Set "S1=%Space%%S1G%" &Set "SD=%Space%%Delta%"

        Echo %S0:~-6% Gbyte  =Total size
        Echo %S2:~-6% Gbyte  =Free space  after releasing
        Echo %S1:~-6% Gbyte  =Free space before releasing
        Echo %SD:~-6% Gbyte  =Space released
GoTo :Eof

rem Перевод байтов в
rem %1 =0 в байты
rem %1 =1 в Кбайты
rem %1 =2 в Мбайты
rem %1 =3 в Гбайты
rem %1 =4 в Тбайты
rem %2 число знаков в дробной части
rem %3 исходное число (байт)
rem %4 "идентификатор" переменной которой присваивается результат
:Size
        FOR /F "usebackq delims=" %%i IN (`Cscript //NoLogo /E:jscript "%~dpnx0" %1 %2 %3`) DO Set "%~4=%%i"
GoTo :Eof

rem Вычисление разности двух величин в байтах
rem %1 =0 в байты
rem %1 =1 в Кбайты
rem %1 =2 в Мбайты
rem %1 =3 в Гбайты
rem %1 =4 в Тбайты
rem %2 число знаков в дробной части
rem %3 первое исходное число (байт)
rem %4 второе исходное число (байт)
rem %5 "идентификатор" переменной которой присваивается результат %2-%1
:SizeDiff
        FOR /F "usebackq delims=" %%i IN (`Cscript //NoLogo /E:jscript "%~dpnx0" %1 %2 %3 %4`) DO Set "%~5=%%i"
GoTo :Eof

*/

var oArg = WScript.Arguments;
var nArg=oArg.Count();

if (nArg>2) {
        var k=1;
        if (oArg(0)==1) k=1024;
        if (oArg(0)==2) k=1024*1024;
        if (oArg(0)==3) k=1024*1024*1024;
        if (oArg(0)==4) k=1024*1024*1024*1024;
}
if (nArg==3) {
        var i=oArg(2)/k;
        WScript.Echo(i.toFixed(oArg(1)));
        WScript.Quit(0);
}
if (nArg==4) {
        var i=(oArg(3)-oArg(2))/k;
        WScript.Echo(i.toFixed(oArg(1)));
        WScript.Quit(0);
}
WScript.Echo("Error!_Invalid_number_of_arguments!");
WScript.Quit(1);


palexa 25-11-2018 22:16 2842595

Что то у меня с этими гибридами не складывается или что то не так с правами или не знаю

Но меня в принципе устроил последний вариант в cmd

Код:

@Echo Off

rem Удаляет (считает) и дописывает результаты в файл-лог

Call \\fs\ts7.bat
Call \\fs\ts8.bat
Call \\fs\ts9.bat
Call \\fs\ts10.bat
Call \\fs\ts11.bat
Call \\fs\ts12.bat

rem отправляет файл-лог на почту
wscript \\fs\mail.vbs

rem ну и на всякий случай удаляет файл-лог
Call \\fs\del.bat

GoTo :Eof

Может не супер точно считает, но этого достаточно, главное есть отчёт что задача выполнена

Так что спасибо большое

Цитата:

Цитата palexa
Что то у меня с этими гибридами не складывается или что то не так с правами или не знаю »

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

Код:

++++++++++ 25.11.2018 21:22:17,57 "\\ts9\c$\users"
  207799447552 byte  =Total size
    95407751168 byte  =Free space before releasing
    95407751168 byte  =Free space  after releasing
              0 byte  =Space released
 198173.0 Mbyte  =Total size
  90987.9 Mbyte  =Free space  after releasing
  90987.9 Mbyte  =Free space before releasing
      0.0 Mbyte  =Space released
193.53 Gbyte  =Total size
 88.86 Gbyte  =Free space  after releasing
 88.86 Gbyte  =Free space before releasing
  0.00 Gbyte  =Space released
++++++++++ 25.11.2018 21:22:19,72 "\\ts10\C$\Users"
  429390819328 byte  =Total size
    62527762432 byte  =Free space before releasing
    62528274432 byte  =Free space  after releasing
        512000 byte  =Space released
 409499.0 Mbyte  =Total size
  59631.6 Mbyte  =Free space  after releasing
  59631.1 Mbyte  =Free space before releasing
      0.5 Mbyte  =Space released
399.90 Gbyte  =Total size
 58.23 Gbyte  =Free space  after releasing
 58.23 Gbyte  =Free space before releasing
  0.00 Gbyte  =Space released
++++++++++ 25.11.2018 21:22:35,00 "\\ts11\c$\users"
  207799447552 byte  =Total size
    64473739264 byte  =Free space before releasing
    64474161152 byte  =Free space  after releasing
        421888 byte  =Space released
 198173.0 Mbyte  =Total size
  61487.4 Mbyte  =Free space  after releasing
  61486.9 Mbyte  =Free space before releasing
      0.4 Mbyte  =Space released
193.53 Gbyte  =Total size
 60.05 Gbyte  =Free space  after releasing
 60.05 Gbyte  =Free space before releasing
  0.00 Gbyte  =Space released


megaloman 25-11-2018 22:31 2842601

Цитата:

Цитата palexa
меня с этими гибридами не складывается »

Вы меня ужасаете. Что не сложилось? Вроде лог файл красивый. Явно данных много. Надо оставить 4 строки в одних единицах измерения

palexa 25-11-2018 22:46 2842605

Цитата:

Цитата megaloman
Вы меня ужасаете. Что не сложилось? »

Это я тупил :sorry:

megaloman 25-11-2018 22:59 2842610

palexa, остаётся переписать vbs отправку на почту в js, чтобы объединить всё в одном файле. Но это я уже глумлюсь. Хотя в каждой шутке ....

Iska 25-11-2018 23:55 2842620

megaloman, коллега palexa таки вынудил Вас сварить кашу из топора ;).

palexa 26-11-2018 00:19 2842623

Цитата:

Цитата Iska
megaloman, коллега palexa таки вынудил Вас сварить кашу из топора . »

И за это большое спасибо

По сути это же удобно
Кликнул раз, пошёл покурить, пришёл и отчёт на почте у всех заинтересованых

megaloman 26-11-2018 00:35 2842625

Iska, мой первый начальник вдолбил мне в голову: инженерная мысль не спит 24 часа в сутки, инженер всегда найдёт чем заняться.


Время: 10:19.

Время: 10:19.
© OSzone.net 2001-