サバのトランク

本やコンピュータや病気のことなど *当ブログではアフィリエイト広告を利用しています*

【訂正】バッチファイルによるバックアップ③ ④

PCの前で悩む少年

「バッチファイルによるバックアップ③, ④」の記事を先日書きましたが、問題点が見つかったので、1点訂正し、2つの注意点を挙げます。

 

ログファイル名はフルパス(full path)で(訂正)

訂正するのは1点で、バッチファイルの中のログファイル名を、フルパス(ドライブ名から始まるファイルまでの経路)で書くという点です。

バッチファイの中で、Dドライブのルートにログファイル "サバBackUp.Log" を作るとしたら、
/LOG:サバBackUp.Log ではなく、
/LOG:D:\サバBackUp.Log と書いてください。

また、ユーザーフォルダ(この例では "C:\Users\savan" )にログファイルを作るなら、
/LOG:C:\Users\savan\サバBackUp.Log ( \savan の部分は人それぞれです)
のように書いてください。

理由は、タスクスケジューラを使ってバッチファイルを起動した場合、コマンドプロンプト "C:\windows\system32" フォルダから起動されてしまうからです。
このフォルダでは、ファイルの作成が拒否されるので、別のフォルダを指定する必要があります。

c:\windows\system32でアクセスが拒否された画面Access is denied)⬇️

アクセス拒否

 

英語モードの場合はログファイル名も英語で(注意)

英語モードを使う場合は、文字化けするのでログファイル名には、下記のように日本語を使わない方が、やはりおすすめです。

/UNILOG:C:\Users\savan\サバBackUp.Log だと文字化け、"SavaBackUp.Log" なら大丈夫⬇️

日本語ファイル名文字化け

 

英語モードで "/UNILOG+:" を使うときのログファイルの扱い(注意)

英語モード("chcp 65001" 使用)で "/UNILOG+:" を使う場合、既存のログファイルが存在せず、新規に作成される場合には、フォルダ名・ファイル名の日本語部分が表示されていない状態になってしまうという問題を見つけました。
コマンドプロンプトの画面表示は問題なし)

回避方法は、最初に「上書きモード」"/UNILOG:" を使ってログファイルを一旦作成しておくことです(この場合、日本語フォルダ名・ファイル名は問題無し)。

次のバックアップの時から "/UNILOG+:" を使って追記していけば、日本語フォルダ名・ファイル名がきちんと表示されたログファイルが保存されます。

⬇️上が日本語が表示されなかった例、下は上記の方法で問題を回避した場合

ログファイルでの日本語ファイル名の問題

最初のうちは、日本語フォルダ名・ファイル名が、消えたり・表示されたりと再現性がわからず悩みましたが、上記の条件で再現性はあります。理由にいつては、モードが変わったとしか私にはわかりません。🙄

 

訂正版バッチファイル

訂正版のバックアップ用のバッチファイルを載せておきます。
ログファイルの保存場所とファイル名は、"D:\SavaBackUp.Log" としておきます。

オプションで動作が変わりますが、2つの例を載せます。⬇️

① (日本語モード、ミラーリング、ログファイル上書き)
------- この下の行からコピー -------
robocopy d:\サバdata e:\サバdata /MIR /FFT /XO /XA:SH /R:0 /W:0 /NP /LOG:D:\SavaBackUp.Log /TEE /NDL
pause
------ この上の行までコピー --------

赤字で示したオプションは、下記それぞれどちらかを選択する。
・"/MIR"(ファイルをミラーリング)or "/E"(ファイルを追記)
・"/LOG:"(ログファイルを上書き)or "/LOG+:"(ログファイルを追記)


②(英語モード、ファイル追記、ログファイル追記)
------- この下の行からコピー -------
chcp 65001
robocopy d:\サバdata e:\サバdata /E /FFT /XO /XA:SH /R:0 /W:0 /NP /UNILOG+:D:\SavaBackUp.Log /TEE /NDL 
pause
------- この上の行までコピー -------

赤字で示したオプションは、下記それぞれどちらかを選択する。
・"/MIR"(ファイルをミラーリング)or "/E"(ファイルを追記)
・"/UNILOG:"(ログファイルを上書き)or "/UNILOG+:"(ログファイルを追記)

 

まとめ

今回の件は、私がバッチファイル単独での動作チェック段階で記事を書き始め、実際にタスクスケジューラーからの起動を確認するのが後回しになった為に問題点に気付くのが遅れました。大変失礼しました。🙇

その後、再現性がつかめず多数のテストを行う中でようやく実態がつかめた、英語モードでの "/UNILOG+:" の日本語の動作については予想を超えて翻弄されました。

また、バッチファイルについてもコードページの問題があり、ファイルを保存するときに気を使う必要があって日本語との相性は良くありませんね。

ただ日本語のフォルダ名やファイル名は実際に多く使われているでしょうから、このシリーズの記事の例でも、あえて日本語のフォルダ名・ファイル名を使っています。

結局、"robocopy" にしろバッチファイルにしろ日本語への移植の問題だと思います。メーカーはもうちょっと丁寧な仕事をしてほしいですね・・・🙄
他のマルチバイト系の文字を使っている国のWindowsはどうなっているんでしょうねぇ?

⬇️「バッチファイルによるバックアップ③, ④」の記事の内容も訂正しました。

savatrunk.com

savatrunk.com