Windows7(たぶん8も10も)を狭い領域でなんとか動かす方法(3

コピー用バッチファイル

便利なバッチを作ってくれた方がいました。

→ Windows 7- C–Program Files フォルダーを別ドライブに移動 (x64 対応半自動化版) (Web)

ただ、こちらのやり方だとWindowsを起動したままやっていて、この通りにやってもどうしてもうまくいきませんでした。というわけでインストーラでやってしまうというのが私の思いついたやり方です。

ほんの少しカスタマイズしたので文末に掲載しておきます。
最初のsettingのところは自分の環境に応じて編集します。

環境によって変更すると言っても、インストーラーで起動した際のドライブ文字ってコロコロ変わるので結局はdiskpartコマンドで確認・変更する必要があるかもしれません。

ドライブ文字が設定できたら、以下のバッチを
USBメモリなどにコピーしておいて、windowsインストーラで起動した後「Shift + F10」を押して開くコマンドプロンプトで実行します。

一応コピーが終わったあとpauseで止まりますので何かキーを押します。

完了したらProgramDataの参照先をレジストリで変更するのですが、それはWindowsが起動していないとできないので、あとでやります。

このまままたWindowsをインストールしては意味が無いので、
強制的に電源を切るか、あればリセットボタンを押してください。Windowsが起動してくるでしょうか・・・?

setup.bat

@echo off
echo ### SETUP ###
echo.

rem User settings: START ==========
set FromUsersDir=C:\Users
set ToUsersDir=G:\Users

set FromProgramData=C:\ProgramData
set ToProgramData=G:\ProgramData


set FromDir=C:\Program Files
set FromDirX86=C:\Program Files (x86)
set ToDir=G:\Program Files
set ToDirX86=G:\Program Files (x86)
rem User settings: END ==========


robocopy %FromUsersDir% %ToUsersDir% /E /COPYALL /XJ
robocopy %FromProgramData% %ToProgramData% /E /COPYALL /XJ



:X86
if /i "%ProgramFiles%" equ "%FromDir%" (
    if exist "%FromDir%" (
        if not exist "%ToDir%" (
            xcopy /e /h /k /o /x /b /y "%FromDir%" "%ToDir%\"
            if exist "%ToDir%\Windows NT\アクセサリ" (
                takeown /f "%ToDir%\Windows NT\アクセサリ" /r /a /d y
                cacls "%ToDir%\Windows NT\アクセサリ" /t /e /c /g %USERNAME%:f
                rmdir /s /q "%ToDir%\Windows NT\アクセサリ"
                if not exist "%ToDir%\Windows NT\アクセサリ" mklink /j "%ToDir%\Windows NT\アクセサリ" "%ToDir%\Windows NT\Accessories"
            )
        )
    )
)

:X64
if /i "%ProgramFiles(x86)%" equ "%FromDirX86%" (
    if exist "%FromDirX86%" (
        if not exist "%ToDirX86%" (
            xcopy /e /h /k /o /x /b /y "%FromDirX86%" "%ToDirX86%\"
        )
    )
)


echo.
echo Copying directories was completed.


echo try rmdir.
pause

rmdir /s /q "%FromDir%"
rmdir /s /q "%FromDirX86%"


rmdir /s /q "%FromUsersDir%"
rmdir /s /q "%FromProgramData%"


echo try symlink


mklink /d "%FromUsersDir%" "%ToUsersDir%"
mklink /d "%FromProgramData%" "%ToProgramData%"
mklink /d "%FromDir%" "%ToDir%"
mklink /d "%FromDirX86%" "%ToDirX86%"


echo ok.

echo regedit try...
echo ProgramData only G: change!

pause