Свободное место на диске
Появилась необходимость в батнике, который будет сканировать логические диски на компе, и отправлять при помощи утилиты blat письмо либо с процентами, либо с количеством Гб свободного пространства.
В интернете информации и возможных решений хватает. Но всё либо очень не практичное, либо для powershell.
Есть мысли как можно просто и удобно это реализовать? Буду благодарен за полезные советы.
|
Цитата:
Цитата s.i.p.a
Есть мысли как можно просто и удобно это реализовать? »
|
да - на powershell :)
обычный 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
|
Цитата:
Цитата 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
|
Спасибо.
Получилось вот что, благодаря вам:
Код:
@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
echo:Свободно на диске C: %fr1%,%fr2%Гб »
|
|
Цитата:
Цитата alpap
в моем коде где эта строка несложно выполняется подобное
Цитата alpap:
echo:Свободно на диске C: %fr1%,%fr2%Гб » »
|
По сути, разница только в запятой. Количество символов не изменилось.
Смысл в том, что бы в теме письма было 2-5 символов от каждого диска. т.е. 5гб или 5000мб, но не 5,578927582гб или 5 238 993 920 байт
p.s. и ваш код не смог подогнать под проверку всех дисков.
|
Код:
@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
|
s.i.p.a, Если тупо отбросить 9 знаков (если учитывать пробелы для выделения разрядов, то 12) и назвать полученное гигабайтами, то минимальная доработка:
Код:
...........................
Set "String=Свободное место на дисках (Гбайт): "
...........................
Set "String=!String!%%d=!sz:~0,-12!; "
...........................
|
Время: 00:40.
© OSzone.net 2001-