Показать полную графическую версию : [решено] определить общий размер удалённых файлов скриптом
megaloman
25-11-2018, 01:02
mwz, Не имеет ли смысл ли заменить сетевой путь на диск, например, Z:, командой net use Z: \\ts7\c$\users
А что в принципе изменится? После pushd мы присваиваем указанной папке букву диска (наманер net use или substr)
Вроде бы отрабатывает (во первых, при отладке делал echo %Drive%, во вторых, отработал правильно wmic: картиночка от palexa это подтвердила )
Уж если и танцевать с бубном, то, наверное, в for и del лучше оставить полные сетевые пути.
Для меня если честно подход админов какой то дикий
Я был системным админом, я вообще не заморачивался
Для каждого были квоты
Для браузера был размер установлен размер кеша
cron в линуксе выполнял всё что надо
и так далее, никто не мог выйти за рамки
Но увы, пришёл в колхоз, должен играть по правилам админа
megaloman
25-11-2018, 01:11
palexa, а уберите Вы мой for co всеми del и вставьте свой кусок из самого первого поста. Он, кстати, рабочий? Удаляет?
Если он рабочий, мои выкрутасы с определением места никак на него не повлияют
Он, кстати, рабочий? Удаляет? »
рабочий, удаляет. проверял
Завтра проверю, потому что устал и буквы расплываются
Не имеет ли смысл ли заменить сетевой путь на диск, например, Z:, командой net use Z: \\ts7\c$\users ? »
Так коллега megaloman как раз меняет — посредством pushd. Иначе %cd% давало бы не те результаты, что ожидалось.
Если размер измерять в миллионах байт а не мегабайтах, то вот чистый батник »
не забываем только, что в cmd оперировать можно только числами int32... т.е. от -2147483647 до 2147483647
set /a res=2147483647+1
т.е. по сути до 2Gb, не более того...
Добавлено:
Понятно, что для обхода этой проблемы и откидываются шесть знаков. Но насколько это корректно? Учитывая, что из байтов мегабайты так не получить, ибо немного соответствие другое ...
Я просто хочу немного автоматизировать свою работу »
Powershell присутствует? Вот его лучше уже применять, ибо возможности в целом несоизмеримы...
уберите Вы мой for co всеми del и вставьте свой кусок из самого первого поста »
http://i.piccy.info/i9/11ae22141d3abaf20bf4b8ebb72012a9/1543138777/9904/1284565/Bez_ymeny_1_240.jpg (http://piccy.info/view3/12793751/bd183fe3ae2e16e4b74b62963b3b96a9/)http://i.piccy.info/a3/2018-11-25-09-39/i9-12793751/240x179-r/i.gif (http://i.piccy.info/a3c/2018-11-25-09-39/i9-12793751/240x179-r)
@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
По предыдущему посту видно, что хлам удаляется и размер считается верно, попробовал на нескольких серверах, полёт нормальный
Эти результаты
Echo Size2=%Size2% FreeSpace2=%FreeSpace2%
Echo Size1=%Size1% FreeSpace1=%FreeSpace1%
Можно сразу поделить на / 1024 / 1024 / 1024 и отправить в файл ?
В ГБ как то нагляднее смотрится
Числа ограничены 32 битами точности. Жаль, ну ладно
megaloman
25-11-2018, 15:54
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
Думаю, записать в файл нужные строки не составит труда
Думаю с точностью мы не угадаем, так что лучше пусть пока будет в байтах, а там посмотрим
429390819328 byte =Total size
398 Gbyte =Total size
429390819328 / 1024 / 1024 /1024 = 399.901 Gbyte
megaloman, Спасибо, за помощь.
megaloman
25-11-2018, 16:48
palexa, Я не гадаю с точностью.
1000*1000=1000000
1024*1024=1048576
То есть отличие составляет ~5% (то есть 1/20 часть от результата)
В CMD нет дробей. Поэтому, если я из миллионов байт получаю мегабайты путём:
млн-млн/20
Погрешность результата составляет 0.2%
Покажите, как отработал вывод в моём последнем варианте. Интересно посравнивать числа при ручных подсчетах и то, что я выдаю
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
Вот скрин на всякий случай до и после
http://i.piccy.info/i9/7a396abe6b0e20478176a68c22e8895b/1543157987/4880/1284565/result_240.jpg (http://piccy.info/view3/12794438/0a93479e45386a8c684fbe5a1e2b581d/)http://i.piccy.info/a3/2018-11-25-14-59/i9-12794438/240x65-r/i.gif (http://i.piccy.info/a3c/2018-11-25-14-59/i9-12794438/240x65-r)
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
Если сервер не найден, то пишет
Сетевой путь не найден.
Wrong path "\\ts7\C$\Users"
Press any key to continue . . .
Как этого избежать, что бы в этом случае батник показал инфу и закрылся
Если я правильно понял закоментровать
Echo Wrong path "%NetPath%"
rem Pause
(а ещё лучше записал эту инфу в указанный файл)
megaloman
25-11-2018, 21:45
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);
Что то у меня с этими гибридами не складывается или что то не так с правами или не знаю
Но меня в принципе устроил последний вариант в 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
Может не супер точно считает, но этого достаточно, главное есть отчёт что задача выполнена
Так что спасибо большое
Что то у меня с этими гибридами не складывается или что то не так с правами или не знаю »
пусть немного похламяться пользователи, попробую
А пока только маленький результ о том что вроде считает точно
++++++++++ 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
меня с этими гибридами не складывается »Вы меня ужасаете. Что не сложилось? Вроде лог файл красивый. Явно данных много. Надо оставить 4 строки в одних единицах измерения
Вы меня ужасаете. Что не сложилось? »
Это я тупил :sorry:
megaloman
25-11-2018, 22:59
palexa, остаётся переписать vbs отправку на почту в js, чтобы объединить всё в одном файле. Но это я уже глумлюсь. Хотя в каждой шутке ....
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC