Компьютерный форум 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=335281)

s.i.p.a 11-06-2018 10:17 2817840

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

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

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

Busla 11-06-2018 11:39 2817848

Цитата:

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

да - на powershell :)


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

alpap 11-06-2018 12:06 2817850

Цитата:

Цитата 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


megaloman 12-06-2018 16:05 2817976

Цитата:

Цитата 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


s.i.p.a 13-06-2018 10:19 2818070

Цитата:

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

alpap 13-06-2018 11:02 2818075

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

Цитата alpap
echo:Свободно на диске C: %fr1%,%fr2%Гб »


s.i.p.a 13-06-2018 11:59 2818086

Цитата:

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

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

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

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

alpap 13-06-2018 14:49 2818114

Код:

@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 13-06-2018 15:34 2818123

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

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



Время: 00:40.

Время: 00:40.
© OSzone.net 2001-