[решено] определение размера жесткого диска
нужен батник для определения оставшегося размера жеского диска например более 1 гб тогда запускается копирование файлов а если меньше тогда выходит
|
глядите что за прогу сделал
(батник должен быть в 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
|
Цитата:
Цитата Bars66
нужен батник для определения оставшегося размера жеского диска например более 1 гб тогда запускается копирование файлов а если меньше тогда выходит »
|
Можно используя Микрософт утилиту freedisk.exe (можно найти в Гугле)
Код:
@Echo Off
freedisk.exe /D c: 1GB>Nul
If ERRORLEVEL 1 GoTo :EOF
::Здесь ваш код
|
если батник не обязателен то вот на VBS:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set DriveC = FSO.GetDrive("C:")
If DriveC.FreeSpace>1048576 then
FSO.CopyFile "C:\filename.txt", "D:\", 0
|
А что такое Google? :) Visual Basic Scripting Edition
Скопируй код foxbat-a в любой текстовый редактор, сохрани как FileName .vbs и запускай как EXE файл.
|
Всем привет!
А если не свободное место, а просто размер системного раздела вычислить? Если больше 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
|
Цитата:
Цитата 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}
|
Ivan Bardeen, спасибо! Всё ок.
Vadikan, спасибо! Всё ок. PS ещё не интегрировался в мою жизнь, так что пока оно коряво. Из батника запускается выполнение скрипта PS, а оттуда опять команда cmd :)
|
Цитата:
Цитата 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 невозможно).
|
Vadikan, всё же я переделал команды под PS.
SendMessage, спасибо за попытку! Вариант с батником был бы тоже интересен.
|
тогда уж как-то так:
Код:
@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
|
Все равно крутимся вокруг 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
)
)
Вроде по тестам работает правильно.
Ага, тут уже есть. И не такое громоздкое. :)
|
а нужна ли такая точность?.. кстати, сравнивать вроде как можно не только числа, но и строки (если они одинаковой длины), поэтому достаточно перед сравнением дополнить строку слева нулями до 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
|
SendMessage, спасибо, но не срабатывает, оба раза выдаёт command2.
amel27, спасибо, работает.
|
Morpheus, посмотрел внимательнее синтаксис PS и сократил скрипт в 9 с пяти строк до трех ;)
|
Время: 07:17.
© OSzone.net 2001-