CMD/BAT - [решено] Свободное место на диске

Ответить
Аватара пользователя
s.i.p.a

CMD/BAT - [решено] Свободное место на диске

Сообщение s.i.p.a »

Появилась необходимость в батнике, который будет сканировать логические диски на компе, и отправлять при помощи утилиты blat письмо либо с процентами, либо с количеством Гб свободного пространства.



В интернете информации и возможных решений хватает. Но всё либо очень не практичное, либо для powershell.



Есть мысли как можно просто и удобно это реализовать? Буду благодарен за полезные советы.
Аватара пользователя
Busla

Re: CMD/BAT - [решено] Свободное место на диске

Сообщение Busla »

Цитата s.i.p.a:



Есть мысли как можно просто и удобно это реализовать?
CMD/BAT - [решено] Свободное место на диске




да - на powershell Изображение



обычный dir выдаёт последней строкой размер свободного пространства
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Свободное место на диске

Сообщение alpap »

Цитата Busla:



обычный dir выдаёт
CMD/BAT - [решено] Свободное место на диске




совершенно верно:

но для папки пойдет и так



Код:

Код: Выделить всё

@echo off
setlocal enabledelayedexpansion
set "d=C:\papka"
for /f "tokens=3" %%a in ('2^>nul dir /a-d/s/-c "%d%"') do set sz=!pps!& set pps=%%a
echo Размер папки - %sz% байт
pause

для диска тоже можно, но в информативных целях (число форматированное)



Код:

Код: Выделить всё

@echo off
for /f "tokens=3*" %%a in ('dir C:') do set "sz=%%a %%b"
echo %sz%
pause

поэтому лучше так



Код:

Код: Выделить всё

@echo off
for /f "tokens=2 delims=:" %%a in ('fsutil volume diskfree C:') do set fr=%%a&call set fr1=%%fr:~1,2%%&call set fr2=%%fr:~3%%&goto l
:l
 echo:Свободно на диске C: %fr1%,%fr2%Гб
pause

или так



Код:

Код: Выделить всё

@echo off
for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where ^(DriveType^=3 and MediaType^=12 and DeviceID^="%~d0"^) get FreeSpace /value^|find "="') do set "fc=%%a"
echo %fc:~,-1%
pause
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Свободное место на диске

Сообщение megaloman »

Цитата s.i.p.a:



необходимость в батнике, который будет сканировать логические диски на компе
CMD/BAT - [решено] Свободное место на диске







Перепевка по этому поводу варианта от alpap

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo Off
cls
Set "String=Свободное место на дисках (байт):  "
FOR /F "usebackq tokens=1,*" %%i IN (`fsutil fsinfo drives`) DO Set "All=%%j" &Call :OutString %%All:\=%%
Echo %String%
Pause
GoTo :Eof
:OutString
	:Begin
		If "%~1"=="" GoTo :Eof
		If Not Exist %1 Shift /1 &GoTo :Begin
		For /f "tokens=3*" %%a in ('dir %1\') do Set "sz=%%a"
		Set "String=%String%%1=%sz%;  "
	Shift /1 &GoTo :Begin
GoTo :Eof








То же, но компактнее

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo Off
cls
SetLocal EnableExtensions EnableDelayedExpansion
Set "String=Свободное место на дисках (байт):  "
FOR /F "usebackq tokens=1,*" %%i IN (`fsutil fsinfo drives`) DO (
	FOR %%d IN (%%j) DO If Exist %%d (
		For /f "tokens=3*" %%a in ('dir %%d') Do Set "sz=%%a"
		Set "String=!String!%%d=!sz!;  "		
	)
)
Set "String=%String:\=%
Echo %String%
Pause
GoTo :Eof
Аватара пользователя
s.i.p.a

Re: CMD/BAT - [решено] Свободное место на диске

Сообщение s.i.p.a »

Цитата alpap:



alpap
CMD/BAT - [решено] Свободное место на диске





Цитата megaloman:



megaloman
CMD/BAT - [решено] Свободное место на диске




Спасибо.





Получилось вот что, благодаря вам:

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo on
cls
SetLocal EnableExtensions EnableDelayedExpansion
Set "String=FTP free space (byte):  "
FOR /F "usebackq tokens=1,*" %%i IN (`fsutil fsinfo drives`) DO (
	FOR %%d IN (%%j) DO If Exist %%d (
		For /f "tokens=3*" %%a in ('dir %%d') Do Set "sz=%%a"
		Set "String=!String!%%d=!sz!;  "		
	)
)
Set "String=%String:\=%
Echo %String%
blat.exe - -to login@login-soft.by -server 192.168.33.100 -f login@login-soft.by -u login@login-soft.by -pw 1111 -subject "%String%" -body "%String%"
Pause
GoTo :Eof









Почти удобно,кроме одного момента - байты. Сами понимаете, что не 80-ый год, и мы работаем с ГБ. Как это сократить до гигов, или хотя бы мб?
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Свободное место на диске

Сообщение alpap »

в моем коде где эта строка несложно выполняется подобное


Цитата alpap:



echo:Свободно на диске C: %fr1%,%fr2%Гб
CMD/BAT - [решено] Свободное место на диске
Аватара пользователя
s.i.p.a

Re: CMD/BAT - [решено] Свободное место на диске

Сообщение s.i.p.a »

Цитата alpap:



в моем коде где эта строка несложно выполняется подобное

Цитата alpap:

echo:Свободно на диске C: %fr1%,%fr2%Гб »
CMD/BAT - [решено] Свободное место на диске




По сути, разница только в запятой. Количество символов не изменилось.



Смысл в том, что бы в теме письма было 2-5 символов от каждого диска. т.е. 5гб или 5000мб, но не 5,578927582гб или 5 238 993 920 байт



p.s. и ваш код не смог подогнать под проверку всех дисков.
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Свободное место на диске

Сообщение alpap »

Код:

Код: Выделить всё

@echo off
for /f "delims=" %%d in ('wmic logicaldisk get name^|find ":"') do call :d %%d
pause& exit
:d
 for /f "tokens=3" %%a in ('2^>nul dir %1') do 2>nul set /a sz=%%a
 if exist %1 echo Свободное место на %1 %sz%Гб
exit /b
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Свободное место на диске

Сообщение megaloman »

s.i.p.a, Если тупо отбросить 9 знаков (если учитывать пробелы для выделения разрядов, то 12) и назвать полученное гигабайтами, то минимальная доработка:

Код:

Код: Выделить всё

...........................
                Set "String=Свободное место на дисках (Гбайт):  "
...........................
		Set "String=!String!%%d=!sz:~0,-12!;  "		
...........................
Ответить

Вернуться в «Скриптовые языки администрирования Windows»