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

Bars66 02-03-2009 18:21 1053017

[решено] определение размера жесткого диска
 
нужен батник для определения оставшегося размера жеского диска например более 1 гб тогда запускается копирование файлов а если меньше тогда выходит

Bars66 02-03-2009 18:31 1053027

глядите что за прогу сделал
(батник должен быть в C:\22\1.bat)
Код:

@Echo Off 
SetLocal EnableExtensions 
 :Loop 
Set UniqFolder=md5%Random%9%Random%88%Random%6%Random%5%Random%   
If Exist  %UniqFolder% GoTo :Loop 
MD C:\1\6\%UniqFolder% 
copy C:\22\1.bat C:\1\6\%UniqFolder% 
start C:\1\6\%UniqFolder%\1.bat


Maza Faka 03-03-2009 09:43 1053512

Цитата:

Цитата Bars66
нужен батник для определения оставшегося размера жеского диска например более 1 гб тогда запускается копирование файлов а если меньше тогда выходит »

Можно используя Микрософт утилиту freedisk.exe (можно найти в Гугле)
Код:

@Echo Off

freedisk.exe /D c: 1GB>Nul
If ERRORLEVEL 1 GoTo :EOF

::Здесь ваш код


foxbat 03-03-2009 11:53 1053612

если батник не обязателен то вот на VBS:

Set FSO = CreateObject("Scripting.FileSystemObject")
Set DriveC = FSO.GetDrive("C:")
If DriveC.FreeSpace>1048576 then
FSO.CopyFile "C:\filename.txt", "D:\", 0

Bars66 04-03-2009 05:38 1054436

А что такое VBS

Maza Faka 04-03-2009 06:44 1054446

Цитата:

Цитата Bars66
А что такое VBS »

А что такое Google? :) Visual Basic Scripting Edition
Скопируй код foxbat-a в любой текстовый редактор, сохрани как FileName.vbs и запускай как EXE файл.

Morpheus 25-01-2011 12:40 1596793

Всем привет!
А если не свободное место, а просто размер системного раздела вычислить? Если больше 30GB - выполнить одну команду, если меньше - другую.

Ivan Bardeen 25-01-2011 13:37 1596838

Цитата:

Цитата Morpheus
Всем привет!
А если не свободное место, а просто размер системного раздела вычислить? Если больше 30GB - выполнить одну команду, если меньше - другую. »

Вот с помощью скрипта на VBS
Код:

strComputer = "."
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = SWBemlocator.ConnectServer(strComputer,"root\CIMV2")
Set colItems = objWMIService.ExecQuery("Select Capacity from Win32_Volume WHERE SystemVolume = True",,48)
For Each objItem in colItems
        SVCapacity = objItem.Capacity
        If SVCapacity > 30000000000 Then
        cmd = WSHShell.Run("команда1",0,True)
        Else
        cmd = WSHShell.Run("команда2",0,True)
        End If
Next


Vadikan 25-01-2011 13:42 1596844

Цитата:

Цитата Morpheus
А если не свободное место, а просто размер системного раздела вычислить? »

PowerShell

Код:

$drive = ((Get-WmiObject Win32_LogicalDisk | Where-Object {$_.DeviceID -eq $(Get-WmiObject Win32_Operatingsystem).systemdrive}).size)/1gb
$drive

Я же тебе показывал скрипт ;) Свободное место тоже можно вычислить...

С вызовом команд как-то так:

Код:

$command1, $command2  = "cmd /c echo command1", "cmd /c echo command2"
$drive = ((Get-WmiObject Win32_LogicalDisk | Where-Object {$_.DeviceID -eq $(Get-WmiObject Win32_Operatingsystem).systemdrive}).size)/1gb
IF ($drive -gt 30) {invoke-expression $command1} else {invoke-expression $command2}


Morpheus 25-01-2011 14:32 1596885

Ivan Bardeen, спасибо! Всё ок.
Vadikan, спасибо! Всё ок. PS ещё не интегрировался в мою жизнь, так что пока оно коряво. Из батника запускается выполнение скрипта PS, а оттуда опять команда cmd :)

Vadikan 25-01-2011 14:42 1596899

Цитата:

Цитата Morpheus
PS ещё не интегрировался в мою жизнь, так что пока оно коряво. Из батника запускается выполнение скрипта PS, а оттуда опять команда cmd »

В этом нет ничего корявого. Команды PS вовсе не обязательно выполнять в консоли PS, главное - результат.

SendMessage 25-01-2011 15:34 1596942

Ну тогда для коллекции батник еще:
Код:

for /f "skip=1" %%i in ('wmic path Win32_logicaldisk.name^="%systemdrive%" get size') do if %%i gtr 32212254720 (command1) else (command2)

Ах ты ж.
Petya V4sechkin, совсем забыл. :)

Petya V4sechkin 25-01-2011 15:40 1596946

SendMessage, ага, я тоже хотел сделать батник, но CMD понимает только 32-битные целые числа (поэтому сравнение с 32212254720 невозможно).

Morpheus 25-01-2011 16:30 1596987

Vadikan, всё же я переделал команды под PS.
SendMessage, спасибо за попытку! Вариант с батником был бы тоже интересен.

amel27 25-01-2011 16:37 1596992

тогда уж как-то так:
Код:

@echo off
SETLOCAL EnableDelayedExpansion

set $z=0& for /f "skip=1 tokens=1,2" %%a in (
'"wmic logicaldisk where name="%SystemDrive%" get size,volumename"'
) do if not "%%b"=="" set "$z=%%a"& set/a "$z=!$z:~,-9!+0"

if %$z% gtr 32 (command1) else command2


Vadikan 25-01-2011 16:43 1596996

Все равно крутимся вокруг Win32_LogicalDisk :)

Исправил заголовок темы.

P.S. Вот PS скрипт для создания отчета о месте на всех дисках системы. Его надо допиливать под свои нужды, но идея сбора инфы понятна http://powershell.com/cs/media/p/1617.aspx

SendMessage 25-01-2011 18:00 1597060

Цитата:

Цитата Petya V4sechkin
CMD понимает только 32-битные целые числа (поэтому сравнение с 32212254720 невозможно). »

Вот попробовал обойти (неоптимизировано, правда):
Код:

setlocal enabledelayedexpansion
for /f "skip=1" %%i in ('wmic path Win32_logicaldisk.name^="%systemdrive%" get size') do (
set size=%%i
set /a sizeM=!size:~0,-9!+0
set /a sizeL=!size:~-9!+0
)
if !sizeM! gtr 32 (
echo command1
) else (
if !sizeM! equ 32 (
if !sizeL! gtr 212254720 (echo command1) else (echo command2)
) else (
echo command2
)
)

Вроде по тестам работает правильно.

Ага, тут уже есть. И не такое громоздкое. :)

amel27 25-01-2011 18:39 1597088

Цитата:

Цитата SendMessage
попробовал обойти »

а нужна ли такая точность?.. кстати, сравнивать вроде как можно не только числа, но и строки (если они одинаковой длины), поэтому достаточно перед сравнением дополнить строку слева нулями до 18 символов (максимум для 64-битного числа):
Код:

@echo off
SETLOCAL EnableDelayedExpansion

set $z=0& for /f "skip=1 tokens=1,2" %%a in (
'"wmic logicaldisk where name="%SystemDrive%" get size,volumename"'
) do if not "%%b"=="" set "$z=000000000000000000%%a"& set "$z=!$z:~-18!"

if "%$z%" gtr "000000032212254720" (command1) else command2


Morpheus 25-01-2011 21:04 1597178

SendMessage, спасибо, но не срабатывает, оба раза выдаёт command2.
amel27, спасибо, работает.

Vadikan 26-01-2011 23:13 1597958

Morpheus, посмотрел внимательнее синтаксис PS и сократил скрипт в 9 с пяти строк до трех ;)


Время: 07:17.

Время: 07:17.
© OSzone.net 2001-