Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Оперативная память
Показать сообщение отдельно

Новый участник


Сообщения: 26
Благодарности: 1

Профиль | Отправить 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

Название темы: Оперативная память