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

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

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

Старожил


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

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


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

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

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

Отправлено: 10:17, 11-06-2018

 

Ветеран


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

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


Цитата s.i.p.a:
Есть мысли как можно просто и удобно это реализовать? »
да - на powershell


обычный dir выдаёт последней строкой размер свободного пространства
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:39, 11-06-2018 | #2



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

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


Ветеран


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

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


Цитата Busla:
обычный dir выдаёт »
совершенно верно:
но для папки пойдет и так
Код: Выделить весь код
@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

Последний раз редактировалось alpap, 11-06-2018 в 12:41.

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

Отправлено: 12:06, 11-06-2018 | #3


Ветеран


Contributor


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

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


Цитата s.i.p.a:
необходимость в батнике, который будет сканировать логические диски на компе »
Перепевка по этому поводу варианта от alpap
Код: Выделить весь код
@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
То же, но компактнее
Код: Выделить весь код
@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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 12-06-2018 в 23:55.

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

Отправлено: 16:05, 12-06-2018 | #4


Старожил


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

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


Цитата alpap:
alpap »
Цитата megaloman:
megaloman »
Спасибо.

Получилось вот что, благодаря вам:
Код: Выделить весь код
@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-ый год, и мы работаем с ГБ. Как это сократить до гигов, или хотя бы мб?

Отправлено: 10:19, 13-06-2018 | #5


Ветеран


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

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


в моем коде где эта строка несложно выполняется подобное
Цитата alpap:
echo:Свободно на диске C: %fr1%,%fr2%Гб »

Отправлено: 11:02, 13-06-2018 | #6


Старожил


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

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


Цитата alpap:
в моем коде где эта строка несложно выполняется подобное
Цитата alpap:
echo:Свободно на диске C: %fr1%,%fr2%Гб » »
По сути, разница только в запятой. Количество символов не изменилось.

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

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

Отправлено: 11:59, 13-06-2018 | #7


Ветеран


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

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


Код: Выделить весь код
@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
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:49, 13-06-2018 | #8


Ветеран


Contributor


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

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


s.i.p.a, Если тупо отбросить 9 знаков (если учитывать пробелы для выделения разрядов, то 12) и назвать полученное гигабайтами, то минимальная доработка:
Код: Выделить весь код
...........................
                Set "String=Свободное место на дисках (Гбайт):  "
...........................
		Set "String=!String!%%d=!sz:~0,-12!;  "		
...........................

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

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

Отправлено: 15:34, 13-06-2018 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Пропадает свободное место на системном диске lohmatix Microsoft Windows 8 и 8.1 2 28-11-2015 15:47
HDD - [решено] лишнее свободное место на диске sytnikanton Накопители (SSD, HDD, USB Flash) 4 04-04-2012 21:07
Свободное место на системном диске lumoder Microsoft Windows NT/2000/2003 6 04-02-2012 15:22
Инфо - Не отображается свободное место на диске The Dream Оформление Windows XP 2 07-12-2011 07:28
Свободное место на диске InnoSanctum Microsoft Windows NT/2000/2003 7 17-02-2009 12:48




 
Переход