locked
Windows Server 2008 R2 でタスクスケジューラで、フォルダーコピーするバッチ処理がうまく処理されない RRS feed

  • 質問

  • Windows Server 2008 R2 上で、共有フォルダーの内容を、NAS上の共有フォルダーにコピーを行う処理を、

    バッチファイルで作成し、タスクスケジューラーで毎日夜中の0:30に起動する様にしようとしていますが、

    バッチファイル自体は問題無く起動する様ですが、バッチファイルの中に記載している、xcopyコマンドの

    処理がうまく動作してくれません。

     

    バッチファイル自体は中に、数ヵ所echoコマンドで、ログファイルにメッセージをリダイレクトする様にしており、

    メッセージがログファイルに正常に出力されている事から、問題無く起動はしていると思われます。

     

    メッセージ出力の間にある、xcopyのコマンドが実行されると、“0個のファイルをコピーしました”と出力される

    為、このコマンドがうまく動作していないものと思います。

     

    このバッチファイルを、ダブルクリックしてタスクスケジューラーからではなく、直接実行すると、xcopyの処理も

    正常に動作する事は、確認しています。

    残すは、タスクスケジューラーの設定で、どこかおかしいところが有るのかと思いますが、皆目見当もつきません。

    どなたか、ご教示頂けませんでしょうか?


    バッチファイルに記載されている、xcopyコマンドは、以下の通りです。

    %SystemRoot%\system32\cmd.exe /c "xcopy e:\本社\一般\スキャナ受信フォルダ z: /S /E /H /Y /R" >> %LOGFILE%

    ※%LOGFILE%は、バッチファイルの最初のほうで、以下の記載をしています。

      set LOGFILE=e:\本社\一般\スキャナ受信フォルダ\Backup.log

     また、バッチファイルの頭の部分で、ドライブをEに変更して、カレントフォルダーもログファイルのあるフォルダーに変更

     しています。記載内容は、以下の通りです。

      e:

      cd \本社\一般\スキャナ受信フォルダ\

    タスクスケジューラーの設定では、『全般』タブで、セキュリティオプションで、“最上位の特権で実行する”にチェックを入れ、

    『操作』タブで、”設定”の”プログラム/スクリプト”にcmd.exeを指定し、”引数の追加(オプション)(A)”に/c "c\Users\Administrator.YUME\共有フォルダー退避.bat"を

    ”開始(オプション)(T)にc\Users\Administrator.YUMEを指定しています。

    2014年4月2日 7:43

回答

  • Kojima Masahiroさん

    そこまで切り分けされているのですから、動かないのは不思議ですね・・・。

    あとは要素を切り捨てて、問題を切り分ける目的で以下を試されてみてはいかがでしょうか。

    1. 環境変数を使わずに記述して動作を確認する。
    2. cmd.exe /cを使わずに、xcopyコマンドを記述する。

    また、気になる所としてはEドライブとZドライブがあります。それぞれタスクスケジューラーから起動されている状態できちんとドライブが認識されているのかどうかを確認しておいたほうが良いと思います。例えば以下のようなバッチファイルを用意し、タスクスケジューラーから起動させて見ると良いかと思います。

    dir e:\本社\一般\スキャナ受信フォルダ >> c:\temp\test.txt
    dir z: >> c:\temp\test.txt

    きちんとタスクスケジューラーから実行されたコンテキストでドライブおよび該当フォルダにアクセスできることを確認する意図です。

    参考になる所があれば幸いです。


    Masahiko Ebisuda

    Microsoft MVP for Windows Expert-IT Pro
    Blog:Windowsインフラ管理者への道
    Blog:System Center Blog
    Blog:Exchange Server Blog

    • 回答の候補に設定 佐伯玲 2014年4月18日 2:56
    • 回答としてマーク 佐伯玲 2014年5月12日 5:54
    2014年4月17日 3:46
  • 外してたら申し訳ない。

    タスクスケジューラ設定内に作業フォルダを指定する項目がありますが、「開始(オプション)」です。

    そこに、「%SystemRoot%\system32\」と入れてみてはどうでしょう。

    アプリケーションによっては、作業フォルダが必要になりますので。。。

    補足

    バッチファイルの xcopy.exe をフルパス指定にすれば解決するかもしれませんね。

    SysWOW64 にも xcopy は存在しますので。

    • 編集済み 藤森幸治 2014年4月17日 9:59 補足
    • 回答の候補に設定 佐伯玲 2014年4月18日 2:56
    • 回答としてマーク 佐伯玲 2014年5月12日 5:54
    2014年4月17日 5:17
  • チャブーンです。

    バッチ実行で問題が出ている場合(特にコマンドプロントを開いていない場合)、コマンド実行時のエラーメッセージを見ないと、何が起こっているのかわからないと思います。まずはしたのようなリダイレクトを行い、コマンドのエラーメッセージを含む応答全文を取得するといいと思います。

    %SystemRoot%\system32\cmd.exe /c "xcopy e:\本社\一般\スキャナ受信フォルダ z: /S /E /H /Y /R" >> %LOGFILE% 2>&1

    あと余計なお世話ですが、コマンド内でドライブをまたぐCDコマンドを実行する場合、以下のように入れたほうがよいです(2行→1行のみに変更します)。

    cd /d e:\本社\一般\スキャナ受信フォルダ\


    2014年4月21日 2:59

すべての返信

  • Kojima Masahiroさん

    そこまで切り分けされているのですから、動かないのは不思議ですね・・・。

    あとは要素を切り捨てて、問題を切り分ける目的で以下を試されてみてはいかがでしょうか。

    1. 環境変数を使わずに記述して動作を確認する。
    2. cmd.exe /cを使わずに、xcopyコマンドを記述する。

    また、気になる所としてはEドライブとZドライブがあります。それぞれタスクスケジューラーから起動されている状態できちんとドライブが認識されているのかどうかを確認しておいたほうが良いと思います。例えば以下のようなバッチファイルを用意し、タスクスケジューラーから起動させて見ると良いかと思います。

    dir e:\本社\一般\スキャナ受信フォルダ >> c:\temp\test.txt
    dir z: >> c:\temp\test.txt

    きちんとタスクスケジューラーから実行されたコンテキストでドライブおよび該当フォルダにアクセスできることを確認する意図です。

    参考になる所があれば幸いです。


    Masahiko Ebisuda

    Microsoft MVP for Windows Expert-IT Pro
    Blog:Windowsインフラ管理者への道
    Blog:System Center Blog
    Blog:Exchange Server Blog

    • 回答の候補に設定 佐伯玲 2014年4月18日 2:56
    • 回答としてマーク 佐伯玲 2014年5月12日 5:54
    2014年4月17日 3:46
  • 外してたら申し訳ない。

    タスクスケジューラ設定内に作業フォルダを指定する項目がありますが、「開始(オプション)」です。

    そこに、「%SystemRoot%\system32\」と入れてみてはどうでしょう。

    アプリケーションによっては、作業フォルダが必要になりますので。。。

    補足

    バッチファイルの xcopy.exe をフルパス指定にすれば解決するかもしれませんね。

    SysWOW64 にも xcopy は存在しますので。

    • 編集済み 藤森幸治 2014年4月17日 9:59 補足
    • 回答の候補に設定 佐伯玲 2014年4月18日 2:56
    • 回答としてマーク 佐伯玲 2014年5月12日 5:54
    2014年4月17日 5:17
  • チャブーンです。

    バッチ実行で問題が出ている場合(特にコマンドプロントを開いていない場合)、コマンド実行時のエラーメッセージを見ないと、何が起こっているのかわからないと思います。まずはしたのようなリダイレクトを行い、コマンドのエラーメッセージを含む応答全文を取得するといいと思います。

    %SystemRoot%\system32\cmd.exe /c "xcopy e:\本社\一般\スキャナ受信フォルダ z: /S /E /H /Y /R" >> %LOGFILE% 2>&1

    あと余計なお世話ですが、コマンド内でドライブをまたぐCDコマンドを実行する場合、以下のように入れたほうがよいです(2行→1行のみに変更します)。

    cd /d e:\本社\一般\スキャナ受信フォルダ\


    2014年4月21日 2:59
  • こんにちは、Kojima Masahiro さん
    フォーラムオペレータの佐伯 玲 です。

    その後の状況はいかがでしょうか?
    みなさんから解決につながるかもしれない情報やトラブルシューティングの方法などご参考になりそうな情報が多く寄せられておりましたので私の方で「回答としてマーク」とさせていただきました。

    ご確認いただいたりお試しいただけた際にはその後の状況をご返信いただけましたらと思います。


    宜しくお願い致します。


    TechNet Community Support 佐伯 玲

    2014年5月12日 5:51