Оперативная память
Здравствуйте ! Подскажите пожалуйста, как лучше реализовать сценарий со следующими условиями:
-Нужен сценарий, определяющий количество свободной доступной RAM (x86) -Выполнение произвольной команды исходя из полученных данных по шаблону: Если %freeram%>2GB - запускается program.exe и сценарий завершает работу без ожидания завершения выполнения команды Если %freeram%<2GB - .... Если %freeram%<1GB - .... Если %freeram%<512MB -.... |
Вас какая «свободная доступная» память интересует — виртуальная или физическая?
|
физическая
Более точнее было бы так: Если %freeram%>2GB - запускается program.exe и сценарий завершает работу без ожидания завершения выполнения команды Если %freeram%<2GB, но >1GB - .... Если %freeram%<1GB, но >512 - .... Если %freeram%<512MB |
На WSH:
Скрытый текст
Код:
Option Explicit |
в CMD возможно реализовать то же самое ?
|
Malukov.Dmitry, для пакетных файлов есть одна проблема: мы не можем напрямую выполнить в них условие:
Цитата:
|
Malukov.Dmitry, Iska, Подозреваю, wmic os get FreePhysicalMemory,TotalVisibleMemorySize выдаёт память в килобайтах. Тогда, если границы задавать в килобайтах, то:
Цитата:
Код:
@Echo Off |
Цитата:
Ваша правда — в килобайтах: Цитата:
|
В принципе, вот к чему пришел. Не самый оптимизированный код, но работает именно как задуманно.
Но опять есть одно НО : уже сломал голову , как прикрутить GUI диалог подтверждения (Да\Нет)в начале сценария. Интересно VBS может вернуть результат в сценарий, будучу запущенным из сценария же ? Пробовал Nircmd qbox , но он упорно отказывается понимать команду GOTO, как и не может выполнять команду по нажатию НЕТ (иначе проблема решилась использование банального taskkill хотя бы). Скрытый текст
@echo off
title Создание RAM-диска :Start IF /i %temp% NEQ X:\windows\temp (goto UnmountRamDiskPromt) :GetInfo set RD1=2621440 set RD2=2097152 set RD3=1572864 wmic os get freephysicalmemory>nul for /f "skip=1" %%p in ('wmic os get freephysicalmemory') do ( set m=%%p goto RamDiskOpt ) :RamDiskOpt Echo Свободной памяти RAM: %m% Килобайт Echo. Echo Текущее расположение TEMP: %temp% Echo Текущее расположение TMP: %tmp% Echo. IF /i %m% GEQ %RD1% ( set rdsize=1024 goto getMainFunction ) else ( IF /i %m% GEQ %RD2% ( set rdsize=768 goto getMainFunction ) else ( IF /i %m% GEQ %RD3% ( set rdsize=512 goto getMainFunction ) else ( goto MemoryLow ) ) ) :MemoryLow nircmd infobox "Не рекомендуется создавать RAM-диск при объеме свободной памяти менее 1.5 ГБ. Операция будет прервана." "Ошибка" exit :getMainFunction setlocal enabledelayedexpansion call :getFreeDisk disk goto MountRamDisk :getFreeDisk set cnt=0 for /f "usebackq skip=1 tokens=*" %%A IN (`wmic logicaldisk get caption`) DO ( set /a cnt+=1 set ldisk.!cnt!=%%A ) set /a cnt-=1 for %%A IN (B K L M N O P Q R S T U V W) DO ( set "f=" for /L %%B IN (1 1 %cnt%) DO ( set "dsk=!ldisk.%%B!" set "dsk=!dsk:~0,1!" if /i "%%A"=="!dsk!" ( set "f=1" ) ) if not defined f ( set %~1=%%~A: exit /b ) ) echo>nul pause exit :MountRamDisk imdisk -a -t vm -s %rdsize%M -m %disk% -p "/fs:ntfs /q /y /v:RAM-Disk">nul md %disk%\Temp>nul setx Temp %disk%\Temp>nul setx Tmp %disk%\Temp>nul If Exist "%disk%\Temp\" nircmd infobox "Папка TEMP успешно перемещена на диск %disk%." "Готово"&&restartshell If Not Exist "%disk%\Temp\" nircmd infobox "Не удалось создать RAM-диск или внести изменения в реестр. Будет выбрана папка по умолчанию (X:\windows\Temp)"&&setx temp X:\Windows\Temp&&setx tmp X:\Windows\Temp&&restartshell>nul exit :UnmountRamDiskPromt title Отключение RAM-диска echo. Echo Папка TEMP уже перемещена на RAM-диск. Отключить все RAM-диски и установить папку TEMP по умолчанию ? echo. Set /p choice="Введите "Y" для продолжения или "N" для выхода и нажмите "ENTER" : " if not defined choice goto UnmountRamDiskPromt if "%choice%"=="y" (goto UnmountRamDisk) if "%choice%"=="Y" (goto UnmountRamDisk) if "%choice%"=="N" (goto GetInfo) if "%choice%"=="n" (goto GetInfo) goto UnmountRamDiskPromt :UnmountRamDisk set tmpdir=%temp% set tmpdisk=%tmpdir:~0,2% imdisk -d -m %tmpdisk%>nul setx temp X:\Windows\Temp>nul setx tmp X:\Windows\Temp>nul restartshell nircmd infobox "Все RAM-диски были отключены. Установлена папка TEMP по умолчанию." "Готово" exit |
Цитата:
Sample.cmd
Код:
@echo off Question.vbs
Код:
Option Explicit Цитата:
Nircmd Help
Цитата:
Но к чему всё это? Если пользуете именно консоль — пользуйте choice.exe. |
Malukov.Dmitry,
У Вас какой-то запутанный код. Попытался упростить. Не очень отладил, нет Ваших утилит.
Код:
@Echo Off |
Время: 18:17. |
Время: 18:17.
© OSzone.net 2001-