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

質問
-
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月17日 3:46 -
外してたら申し訳ない。
タスクスケジューラ設定内に作業フォルダを指定する項目がありますが、「開始(オプション)」です。
そこに、「%SystemRoot%\system32\」と入れてみてはどうでしょう。
アプリケーションによっては、作業フォルダが必要になりますので。。。
補足
バッチファイルの xcopy.exe をフルパス指定にすれば解決するかもしれませんね。
SysWOW64 にも xcopy は存在しますので。
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月17日 3:46 -
外してたら申し訳ない。
タスクスケジューラ設定内に作業フォルダを指定する項目がありますが、「開始(オプション)」です。
そこに、「%SystemRoot%\system32\」と入れてみてはどうでしょう。
アプリケーションによっては、作業フォルダが必要になりますので。。。
補足
バッチファイルの xcopy.exe をフルパス指定にすれば解決するかもしれませんね。
SysWOW64 にも xcopy は存在しますので。
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