改めてタイトルをみるとなんのこっちゃという感じですね。
下で説明しますが、備忘録がてらスクリプトを作成したのでメモしておきます。ファイルサーバのデータ移行のときに使い回せるといいなぁ。
ドライブを指定するとどうなるのか
例えば、Dドライブのデータをすべて別のドライブやバックアップサーバにコピーを取得したい、などといったときに、コピー元に D:\ などと指定すると隠し属性が付与されてしまい、バックアップ先で表示されないときがあります。
そんなこんないろいろ面倒ごとを回避するため、ドライブ直下のフォルダを指定してrobocopyコマンドを指定した方が都合がいい。(ときがあったような気がする。。。弱気)
ドライブを指定してまるごとバックアップする
まずは、コピー元にドライブを指定する場合の書き方です。(あまりやりたくない方法)。
あと、コマンドプロンプトではなく、PowerShellで書いています。変数の指定などがコマンドプロンプトより書きやすいので。
1 2 3 4 5 6 7 8 9 10 |
$BK_DATE = Get-Date -format yyyyMMdd $From_dir = "D:\" $To_dir = "E:\" $LOG = "F:\bk_${BK_DATE}.log" ### Backup : D drive robocopy $From_dir $To_dir /mir /copyall /np /ndl /r:0 /w:0 /xjd /xjf /zb /log:$LOG |
ドライブを指定しないでまるごとバックアップする
やり方としては、
- コピー元のドライブ配下のフォルダ一覧を取得
- バックアップ元と先を指定
- Foreach でまわす
という方法です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$BK_DATE = Get-Date -format yyyyMMdd $get_dirs = Get-ChildItem D:\ foreach ( $dir in $get_dirs ){ $From_dir = "D:\${dir}" $To_dir = "E:\${dir}" $LOG = "F:\bk_${BK_DATE}.log" ### Backup : E drive robocopy $From_dir $To_dir /mir /copyall /np /ndl /r:0 /w:0 /xjd /xjf /zb /log:$LOG } |
除外したいフォルダがある場合
ドライブ直下のフォルダでバックアップ対象から外したい(除外したい)フォルダがある場合は、一覧を取得するときに除外します。
↑の方法だと、robocopy コマンドの除外オプションでは対応できないです(取得したフォルダ名をFromとToに指定するため)
例えば、D:\notBK01 というフォルダを除外したい場合は、変数「$get_dirs」を以下に差し替えます。
1 |
$get_dirs = Get-ChildItem D:\ | Where-Object { $_.name -ne "notBK01" } |
除外したいフォルダが複数ある場合は、Where-Object で以下のように書けます。
D:\notBK01 フォルダと D:\notBK02 フォルダを除外します。
1 |
$get_dirs = Get-ChildItem D:\ | Where-Object { $_.name -ne "notBK01" -and $_.Name -ne "notBK02" } |
まとめ
記事を書いていてまわりくどいやり方をしているような気がしますが、使い回せると考えれば・・・。半分自己満足なので良しとしましょう。
使用する場合は自己責任にてお願いいたします!m_ _m
以上です。
↓↓↓ Powershell のおすすめレシピ ~結局はオライリー~