Last-modified: 2016-03-29 (火) 00:48:02
WindowsTips/Users,ProgramDataを別ドライブへ移動したい

概要

AppData以下をデフォルトのワークフォルダとするアプリが多い昨今。
そこに膨大なデータを作るアプリもあり(itunesとかitunesとかitunesとか)、CドライブがSSDだと逼迫してしまいます。
とはいえ、各アプリの設定で別ドライブを指定するのは非常に煩わしい。やりたくない。
ということで、C:\Users(とC:\ProgramData)を、OSインストールから相当経過した後に移動してみました。
C:\Usersはアクセス権の絡みで実行時にコピーや削除しずらいため、WindowsPE上で作業します。
C:\Users, C:\ProgramDataの実体をD:\Users, D:\ProgramDataへ移動します。


ちなみに、OSインストール時点でパスを変更したい場合は、
SSDに対して過保護になる
のようなことをすればいけます(これを試したときはWindows7だったので、今は違うかもですが)

手順

  1. WindowsPEがなければ作る
    WindowsPE USBメモリを作成する
  2. WindowsPEを起動
  3. Users,ProgramDataをコピー
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
    
    -
    |
    !
    -
    |
    |
    !
     
    -
    !
     
    
    REM WindowsPE起動時はドライブレターがずれるので、あらかじめdirで確認しておく
    REM 今回は、D:がC:に, C:がH:になっていたので、以下の例ではこの環境ですすめる
     
    REM /E: 空ディレクトリもコピー
    REM /COPYALL: ファイル情報をすべてコピー
    REM /NP: 進捗状況なし
    robocopy <コピー元> <コピー先> /E /COPYALL /R:<リトライ回数(既定値1,000,000)> /W:<リトライ間隔(既定値30秒)> /NP /UNILOG:<ログ出力先>
     
    REM 例
    robocopy "H:\Users" "C:\Users" /E /COPYALL /R:3 /W:3 /NP /UNILOG:users.log
    robocopy "H:\ProgramData" "C:\ProgramData" /E /COPYALL /R:3 /W:3 /NP /UNILOG:programdata.log
  4. コピー元のUsers, ProgramDataを削除
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
    
    -
    |
    !
     
    -
    !
     
    
    REM /S: ディレクトリツリーを削除
    REM /Q: quietモード
    rmdir /S /Q <対象パス>
     
    REM 例
    rmdir /s /q "H:\Users"
    rmdir /s /q "H:\ProgramData"
  5. シンボリックリンク作成
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
    
    -
    |
    !
     
    -
    !
     
    
    REM /D: ディレクトリのシンボリックリンクを作成
    REM シンボリックリンクなので、現時点で存在していないパスでも作成できる
    mklink /D <シンボリックリンクパス> <実体のパス>
     
    REM 例
    mklink /D "H:\Users" "C:\Users"
    mklink /D "H:\ProgramData" "C:\ProgramData"
  6. 再起動して、正常に動くことを確認

検証時の環境