|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Оперативная память |
|
|
CMD/BAT - Оперативная память
|
Новый участник Сообщения: 26 |
Здравствуйте ! Подскажите пожалуйста, как лучше реализовать сценарий со следующими условиями:
-Нужен сценарий, определяющий количество свободной доступной RAM (x86) -Выполнение произвольной команды исходя из полученных данных по шаблону: Если %freeram%>2GB - запускается program.exe и сценарий завершает работу без ожидания завершения выполнения команды Если %freeram%<2GB - .... Если %freeram%<1GB - .... Если %freeram%<512MB -.... |
|
Отправлено: 09:44, 01-12-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Вас какая «свободная доступная» память интересует — виртуальная или физическая?
|
Отправлено: 10:27, 01-12-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать физическая
Более точнее было бы так: Если %freeram%>2GB - запускается program.exe и сценарий завершает работу без ожидания завершения выполнения команды Если %freeram%<2GB, но >1GB - .... Если %freeram%<1GB, но >512 - .... Если %freeram%<512MB |
Отправлено: 16:35, 07-12-2018 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать На WSH:
Скрытый текст
Option Explicit Dim objSWbemServicesEx Dim objSWbemObjectEx Dim lngFreePhysicalMemory Set objSWbemServicesEx = WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2") For Each objSWbemObjectEx In objSWbemServicesEx.ExecQuery("SELECT FreePhysicalMemory FROM Win32_OperatingSystem") lngFreePhysicalMemory = CLng(objSWbemObjectEx.FreePhysicalMemory) If lngFreePhysicalMemory > 2 * 2^20 Then 'Если %freeram%>2GB - запускается program.exe и сценарий завершает работу без ожидания завершения выполнения команды WScript.CreateObject("WScript.Shell").Run """%SystemRoot%\System32\notepad.exe""", 1, False ElseIf lngFreePhysicalMemory > 2^20 Then 'Если %freeram%<2GB, но >1GB - .... '… ElseIf lngFreePhysicalMemory > 512 * 2^20 Then 'Если %freeram%<1GB, но >512 - .... '… Else 'Если %freeram%<512MB '… End If Exit For Next Set objSWbemServicesEx = Nothing WScript.Quit 0 |
Последний раз редактировалось Iska, 08-12-2018 в 18:22. Причина: Замечание коллеги megaloman ниже по поводу килобайт Отправлено: 18:22, 07-12-2018 | #4 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать в CMD возможно реализовать то же самое ?
|
|
Последний раз редактировалось Malukov.Dmitry, 07-12-2018 в 20:57. Отправлено: 20:41, 07-12-2018 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Malukov.Dmitry, для пакетных файлов есть одна проблема: мы не можем напрямую выполнить в них условие:
Цитата Malukov.Dmitry:
![]() |
|
Отправлено: 02:54, 08-12-2018 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Malukov.Dmitry, Iska, Подозреваю, wmic os get FreePhysicalMemory,TotalVisibleMemorySize выдаёт память в килобайтах. Тогда, если границы задавать в килобайтах, то:
Цитата Malukov.Dmitry:
@Echo Off cls Set Program="C:\Windows\System32\notepad.exe" FOR /F "usebackq skip=1 tokens=1,2 delims= " %%i IN (`"wmic os get FreePhysicalMemory,TotalVisibleMemorySize"`) DO If Not "%%j"=="" Set /A Free=%%i If %Free% LSS 524288 Call :Lss512Mb %Free% &GoTo :Cont If %Free% LSS 1048576 Call :Lss1Gb %Free% &GoTo :Cont If %Free% LSS 2097152 Call :Lss2Gb %Free% &GoTo :Cont Start " " %Program% &GoTo :Eof :Cont pause GoTo :Eof :Lss512Mb Echo 512Mb^<=%1Mb GoTo :Eof :Lss1Gb Echo 512Mb^<=%1Mb^<1Gb GoTo :Eof :Lss2Gb Echo 1Gb^<=%1Mb^<2Gb GoTo :Eof |
|
------- Последний раз редактировалось megaloman, 08-12-2018 в 16:18. Отправлено: 15:07, 08-12-2018 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Ваша правда — в килобайтах: Цитата:
|
||
Последний раз редактировалось Iska, 08-12-2018 в 18:19. Отправлено: 18:11, 08-12-2018 | #8 |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать В принципе, вот к чему пришел. Не самый оптимизированный код, но работает именно как задуманно.
Но опять есть одно НО : уже сломал голову , как прикрутить 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 |
Последний раз редактировалось Malukov.Dmitry, 09-12-2018 в 07:11. Отправлено: 07:06, 09-12-2018 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Malukov.Dmitry:
Sample.cmd
Question.vbs
Цитата Malukov.Dmitry:
Nircmd Help
Цитата:
Но к чему всё это? Если пользуете именно консоль — пользуйте choice.exe. |
|||
Отправлено: 11:16, 09-12-2018 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Оперативная память | Solublek | Материнские платы и память | 2 | 11-03-2017 09:09 | |
ОПЕРАТИВНАЯ ПАМЯТЬ | Андрей97 | Металлолом | 2 | 26-01-2014 19:24 | |
Разное - Оперативная память | sanya_lampard | Прочее железо | 5 | 05-04-2013 19:06 | |
Разное - Оперативная память | Владимир161086 | Microsoft Windows 7 | 2 | 13-01-2012 09:54 | |
Оперативная память | Verochka | Материнские платы и память | 11 | 23-11-2009 09:43 |
|