Возможное решение
При условии, что:
- Вы уже создали ОЗУ в физической памяти, назначенной
R:
(любая другая буква тоже подойдет).
- Вы хотите сделать папку
C:\Folder1
доступной в оперативной памяти для более быстрого доступа.
Folder1
хранится на локальном томе в формате NTFS.
Применение изменений
- Закройте все программы, которые могут получить доступ к
Folder1
.
- Переименуйте
Folder1
в Folder1.zTarget
(реальное имя не важно, если оно другое).
- Скопируйте
Folder1.zTarget
на RAM-диск (R:
:).
- Создайте ссылку соединения каталога с именем
Folder1
указывающую на R:\Folder1.zTarget
.
С этого момента каждый раз, когда вы обращаетесь к C:\Folder1
, на самом деле вы получаете доступ к данным, хранящимся на диске RAM (R:\Folder1.zTarget
).
Возврат обратно
- Закройте все программы, которые могут обращаться к
Folder1
(теперь ссылка для соединения с каталогом).
- Если какой-либо файл внутри
Folder1
был изменен, скопируйте Folder1.zTarget
из RAM (R:
:) на диск (C:
:), чтобы сохранить изменения.
- Удалите ссылку соединения каталога с именем
Folder1
.
- Переименуйте
Folder1.zTarget
обратно в Folder1
.
Пакетная автоматизация
Несмотря на то, что большинство шагов можно выполнить вручную, встроенного способа создания ссылок на соединения в каталогах нет, кроме как из интерфейса командной строки (mklink
). Пока мы на этом, мы можем сэкономить время, автоматизируя весь процесс.
Пример скрипта
После краткой инициализации скрипт проверит, есть ли какие-либо папки, имя которых содержит пользовательский суффикс. Затем он будет продолжать применять или отменять изменения для каждого набора папок в переменной folders
, как описано выше, за исключением шагов "закрыть все программы".
@echo off
set folders="C:\Folder1","C:\Some other\folder"
set suffix=zTarget
set ramdisk=R:
for %%G in (%folders%) do (
dir "%%~dpG" /a:d | find ".%suffix%" >nul
goto :check
)
:check
if "%errorlevel%"=="0" goto :revert
:apply
for %%G in (%folders%) do (
if exist "%%~G\" (
ren "%%~G" "%%~nG.%suffix%"
xcopy "%%~G.%suffix%" "%ramdisk%%%~pnG.%suffix%" /e /i /f /h /r /k /y /j
mklink /j "%%~G" "%ramdisk%%%~pnG.%suffix%"
echo.
))
goto :end
:revert
for %%G in (%folders%) do (
if exist "%%~G.%suffix%\" (
xcopy "%ramdisk%%%~pnG.%suffix%" "%%~G.%suffix%" /e /i /f /h /r /k /y /j
rd "%%~G"
ren "%%~G.%suffix%" "%%~nG"
echo.
))
:end
pause
exit /b