[FAQ CENTER トップ]
[Powershell FAQ トップへ]



【Powershell】robocopy 実行時の戻り値判定



更新日:2019/09/26


robocopy の戻り値(return value)を取得する


robocopy を powershell で実行することが可能です。powershell にも Copy-item によりフォルダ丸ごとのコピーが可能ですがフォルダ構成が崩れてしまうなど問題があります。
そこで robocopy を使用してうまく処理することになりますが、戻り値が取れるか心配になるでしょう。

powershell で robocopy を実行R

バッチファイルの場合は ERRORLEVEL で取得することが可能です。

バッチファイルでのrobocopyの戻り値


バッチファイルでのrobocopyの戻り値の取得方法は以下の通りです。%ERRORLEVEL%で取得可能です。

C:\temp>robocopy c:\temp\from c:\temp\to /E

-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------

<中略>

C:\temp>echo %ERRORLEVEL%
0



次はPowershellでの取得方法を紹介します。

サンプルコード集

以下は Windows 10 環境におけるサンプルコードと実行結果です。

以下はrobocopy コマンドに成功しているため、戻り値である $LASTEXITCODEに 0 が入っています。


サンプルコード:


robocopy c:\temp\from c:\temp\to /E

$ret = $LASTEXITCODE
write ("戻り値: ${ret}")
if ($ret -ne 0)
{
write-host "robocopy でエラーが発生しました。"
}


実行結果:


-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------

開始: 2019年9月26日 23:30:38
コピー元 : c:\temp\from\
コピー先 : c:\temp\to\

ファイル: *.*

オプション: *.* /S /E /DCOPY:DA /COPY:DAT /R:1000000 /W:30

------------------------------------------------------------------------------

0 c:\temp\from\

------------------------------------------------------------------------------

合計 コピー済み スキップ 不一致 失敗 Extras
ディレクトリ: 1 0 1 0 0 0
ファイル: 0 0 0 0 0 0
バイト: 0 0 0 0 0 0
時刻: 0:00:00 0:00:00 0:00:00 0:00:00
終了: 2019年9月26日 23:30:38

戻り値: 0






以下は存在しないフォルダ(c:\NONEXIST\from)を指定しているためエラーが発生しています。
エラー番号は 16 です。
$LASTEXITCODEが 0 でないためエラーを出力しています。


サンプルコード:


robocopy c:\NONEXIST\from c:\temp\to /E

$ret = $LASTEXITCODE
write ("戻り値: ${ret}")
if ($ret -ne 0)
{
write-host "robocopy でエラーが発生しました。"
}


実行結果:


-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------

開始: 2019年9月26日 23:40:29
コピー元 : c:\NONEXIST\from\
コピー先 : c:\temp\to\

ファイル: *.*

オプション: *.* /S /E /DCOPY:DA /COPY:DAT /R:1000000 /W:30

------------------------------------------------------------------------------

2019/09/26 23:40:29 エラー 3 (0x00000003) コピー元ディレクトリにアクセスしています c:\NONEXIST\from\
指定されたパスが見つかりません。
戻り値: 16
robocopy でエラーが発生しました。





【おまけ】

フォルダを丸ごとコピーする場合のよく使う オプションを紹介します。


robocopy /E /S /SEC /V /R:5 /W:30 /NP /MAXAGE:99 c:\temp\from c:\temp\to



/E ・・・サブディレクトリもコピー
/S ・・・空のフォルダもコピー
/V ・・・スキップ時に詳細を出力
/SEC ・・・セキュリティ情報もコピー
/R:n ・・・失敗時のリトライ回数
/W:s ・・・リトライまでのwait秒数
/NP ・・・詳細を表示しない
/MAXAGE・・・指定した日にち以内のファイルを対象


サンプルコード:

robocopy /E /S /SEC /V /R:5 /W:30 /NP /MAXAGE:99 c:\temp\from c:\temp\to


実行結果:


-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------

開始: 2019年9月26日 23:49:36
コピー元 : c:\temp\from\
コピー先 : c:\temp\to\

ファイル: *.*

オプション: *.* /V /S /DCOPY:DA /COPY:DATS /NP /IM /MAXAGE:99 /R:5 /W:30

------------------------------------------------------------------------------

0 c:\temp\from\

------------------------------------------------------------------------------

合計 コピー済み スキップ 不一致 失敗 Extras
ディレクトリ: 1 0 1 0 0 0
ファイル: 0 0 0 0 0 0
バイト: 0 0 0 0 0 0
時刻: 0:00:00 0:00:00 0:00:00 0:00:00
終了: 2019年9月26日 23:49:36









[Powershell FAQ トップへ]
[FAQ CENTER トップ]


本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。) Copyright(c) tooljp.com 2007-2018