現行 OS では、既に、機能していませんでした。
何時頃から 無意味だった のかは分かりませんが、
恐らく、Robocopy の仕様変更なのでしょう。
以前 ご紹介した フォルダ構造をコピーする コマンド は、
現行 OS (Windows 10 version 2004/20H2) では、
更新には成功した様なコマンドアウトプット(経過報告)を返しますが、
実際のファイルシステム上ではコピーされません。
そう、こんな コマンド でしたね。
Robocopy SourceDir ExtensionDir /S /Dcopy:T /XF:*.*
あれっ!、動かないぞ!。
おや?、また トラブルか?、と一瞬訝しく思った訳ですが、
違います。
記述にミスがある(/XF の後の、 : は間違いで、半角スペースが正)のでした。
また、
オプション記述の /S と /E との違いを思い出しましょう。
/S は空フォルダをスキップし、
/E は空フォルダを扱います。
以前は、/S でも フォルダ生成 してくれていましたが、
生成結果が空フォルダになるか否か は 関係無い 動作でした。 だった筈です。
それが、
現行の Robocopy は、/S の場合、生成結果をも反映して処理している様です。
ですから、
空フォルダを作る目的で全ファイル除外したコマンドは、
生成結果の空フォルダ作成を無視して仕舞います。
コマンドアウトプット(経過報告)は 如何にも成功 なのですが、
echo %errorlevel% を続けて実行すれば Return Code 9009 が返されます。
成功時の 0 / 1 / 2 等ではありませんね。
9009 を検索して見ると
ありえないコマンドを実行しようとした場合は errorlevel に 9009 が入る
との事。
そう、矛盾したオプションの組み合わせから、こうした戻り値が返っているのでしょうか。
ですから、
/S では無く、 /E を指定してあげれば OK ! です。
Robocopy SourceDir ExtensionDir /E /Dcopy:T /XF *.*
何時から、この様な仕様に変更されていたか? は不明ですが、
相当前であった様な気もします。
実際に利用する機会は少ないので、すっかり、見落としていました。
見た目、成功しているのに、コピーされていない ... 。
これは 精神衛生上 宜しく無い! ですから、
お気を付け下さいませ。
何だか、
大昔の SF 映画 の名作 2001年宇宙の旅 2001: A Space Odyssey の Computer : HAL を思い出しました。
そう、 搭乗員 を危機に陥れる あれ です。
その種明かしは ... 。
続編 2010年宇宙の旅 2010: Odyssey Two (The Year We Make Contact) で明らかにされていましたね。
私のやっていた事は ... これと同じ ... 。
命令の矛盾!。
私の以前の投稿は、搭乗前 HAL9000 にやった仕打ち(設定)と、ある意味、一緒だった訳で ... 。 X(
参考迄に、試行錯誤の経緯を。
19041.572 、そう、Version 2004 上で。
おや、 Version 20H2 で出ていた Return Code 9009 が 出ませんねぇえ。
Microsoft Windows [Version 10.0.19041.572]
(c) 2020 Microsoft Corporation. All rights reserved.
C:¥WINDOWS¥system32>tree H:¥TestRobocopy /F
フォルダー パスの一覧: ボリューム Luxe_64G_1
ボリューム シリアル番号は 0123-ABCD です
H:¥TESTROBOCOPY
└─Sub1
├─Sub1a
│ text1a.txt
│
└─Sub1b
C:¥WINDOWS¥system32>Robocopy h:¥TestRobocopy h:¥TestRobocopy2 /S /Dcopy:T /XF:*.*
-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
開始: 2020年10月
コピー元 - h:¥TestRobocopy¥
コピー先 - h:¥TestRobocopy2¥
ファイル:
オプション: /S /DCOPY:T /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
エラー: 無効なパラメーター #5 : "/XF:*.*"
簡易な使用法 :: ROBOCOPY コピー元 コピー先 /MIR
コピー元 :: コピー元ディレクトリ (ドライブ:¥パスまたは ¥¥サーバー
¥共有¥パス)。
コピー先 :: コピー先ディレクトリ (ドライブ:¥パスまたは ¥¥サーバー
¥¥共有¥パス)。
/MIR :: 完全なディレクトリ ツリーをミラー化します。
詳細な使用方法については、ROBOCOPY /? を実行してください。
**** /MIR はファイルをコピーできるだけでなく、削除もできます。
C:¥WINDOWS¥system32>Robocopy h:¥TestRobocopy h:¥TestRobocopy2 /S /Dcopy:T /XF *.*
-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
開始: 2020年10月
コピー元 : h:¥TestRobocopy¥
コピー先 : h:¥TestRobocopy2¥
ファイル: *.*
除外ファイル: *.*
オプション: *.* /S /DCOPY:T /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
新しいディレクトリ 0 h:¥TestRobocopy¥
新しいディレクトリ 0 h:¥TestRobocopy¥Sub1¥
新しいディレクトリ 1 h:¥TestRobocopy¥Sub1¥Sub1a¥
新しいディレクトリ 0 h:¥TestRobocopy¥Sub1¥Sub1b¥
------------------------------------------------------------------------------
合計 コピー済み スキップ 不一致 失敗 Extras
ディレクトリ: 4 4 0 0 0 0
ファイル: 1 0 1 0 0 0
バイト: 1 0 1 0 0 0
時刻: 0:00:00 0:00:00 0:00:00 0:00:00
終了: 2020年10月
C:¥WINDOWS¥system32>echo %errorlevel%
0
C:¥WINDOWS¥system32>tree H:¥TestRobocopy2 /F
フォルダー パスの一覧: ボリューム Luxe_64G_1
ボリューム シリアル番号は 0123-ABCD です
H:¥TESTROBOCOPY2
サブフォルダーは存在しません
C:¥WINDOWS¥system32>rem Results ; Copy Only Root (h:¥TestRobocopy2)
C:¥WINDOWS¥system32>rem Delete h:¥TestRobocopy2
C:¥WINDOWS¥system32>Robocopy h:¥TestRobocopy h:¥TestRobocopy2 /E /Dcopy:T /XF *.*
-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
開始: 2020年10月
コピー元 : h:¥TestRobocopy¥
コピー先 : h:¥TestRobocopy2¥
ファイル: *.*
除外ファイル: *.*
オプション: *.* /S /E /DCOPY:T /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
新しいディレクトリ 0 h:¥TestRobocopy¥
新しいディレクトリ 0 h:¥TestRobocopy¥Sub1¥
新しいディレクトリ 1 h:¥TestRobocopy¥Sub1¥Sub1a¥
新しいディレクトリ 0 h:¥TestRobocopy¥Sub1¥Sub1b¥
------------------------------------------------------------------------------
合計 コピー済み スキップ 不一致 失敗 Extras
ディレクトリ: 4 4 0 0 0 0
ファイル: 1 0 1 0 0 0
バイト: 1 0 1 0 0 0
時刻: 0:00:00 0:00:00 0:00:00 0:00:00
終了: 2020年10月
C:¥WINDOWS¥system32>echo %errorlevel%
0
C:¥WINDOWS¥system32> C:¥WINDOWS¥system32>rem Results ; Copy All Include Empty Sub Directories
C:¥WINDOWS¥system32>tree H:¥TestRobocopy2 /F
フォルダー パスの一覧: ボリューム Luxe_64G_1
ボリューム シリアル番号は 0123-ABCD です
H:¥TESTROBOCOPY2
└─Sub1
├─Sub1a
└─Sub1b
C:¥WINDOWS¥system32> .
0 件のコメント:
コメントを投稿