PDA

Показать полную графическую версию : [решено] Свободное место на диске


s.i.p.a
11-06-2018, 10:17
Появилась необходимость в батнике, который будет сканировать логические диски на компе, и отправлять при помощи утилиты blat письмо либо с процентами, либо с количеством Гб свободного пространства.

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

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

Busla
11-06-2018, 11:39
Есть мысли как можно просто и удобно это реализовать? »
да - на powershell :)

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

alpap
11-06-2018, 12:06
обычный 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
необходимость в батнике, который будет сканировать логические диски на компе »@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
alpap »
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
в моем коде где эта строка несложно выполняется подобное
echo:Свободно на диске C: %fr1%,%fr2%Гб »

s.i.p.a
13-06-2018, 11:59
в моем коде где эта строка несложно выполняется подобное
Цитата alpap:
echo:Свободно на диске C: %fr1%,%fr2%Гб » »

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

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

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

alpap
13-06-2018, 14:49
@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
s.i.p.a, Если тупо отбросить 9 знаков (если учитывать пробелы для выделения разрядов, то 12) и назвать полученное гигабайтами, то минимальная доработка:...........................
Set "String=Свободное место на дисках (Гбайт): "
...........................
Set "String=!String!%%d=!sz:~0,-12!; "
...........................




© OSzone.net 2001-2012