質問者
forfilesコマンド タスクスケジューラ起動にてforfilesが処理されない

質問
-
あるフォルダ配下のn日経過したフォルダを削除するため、forfilesを利用し該当のフォルダを削除する次のバッチ(バッチソース(1))を作成しています。
● バッチソース(1)
cd /d %~dp0
set logsv_dir=%1
if "%logsv_dir%" == "" set logsv_dir=D:\otherdrive\backup_a
set logsv_days=%2
if "%logsv_days%" == "" set logsv_days=30
forfiles /p %logsv_dir% /d -%logsv_days% /c "%ComSpec% /c RMDIR /S /Q @path"DOS窓からの実行では、30日以前のフォルダを削除できるのですが、タスクスケジューラに登録し、実行させると該当フォルダが削除されず正常終了となります。
調査のために、次のバッチ(バッチソース(2) RMDIRの部分を echoにしたもの)を作成し、DOS窓からの実行状態(LIST(1))と、タスクスケジューラでの実行状態(LIST(2))を出力させたところ、タスクスケジューラでの実行では、forfilesコマンド部分のECHO出力が出力されていないことがわかっています。
● バッチソース(2)
cd /d %~dp0
@echo rem1 > list.txt
set logsv_dir=%1
if "%logsv_dir%" == "" set logsv_dir=D:\otherdrive\backup_a@echo rem2 >> list.txt
set logsv_days=%2
if "%logsv_days%" == "" set logsv_days=30
@echo %logsv_dir% >> list.txt
@echo %logsv_days% >> list.txt@echo rem3 >> list.txt
forfiles /p %logsv_dir% /d -%logsv_days% /c "%ComSpec% /c echo @path" >> list.txt@echo rem4 >>list.txt
exit
● DOS窓からの実行状態(LIST(1))
rem1
rem2
D:\otherdrive\backup_a
30
rem3"D:\otherdrive\backup_a\20171010"
"D:\otherdrive\backup_a\20171011"
"D:\otherdrive\backup_a\20171201"
rem4● タスクスケジューラでの実行状態(LIST(2))
rem1
rem2
D:\otherdrive\backup_a
30
rem3
rem4● タスクスケジューラの実行履歴
タスク スケジューラは、タスク "\pauge"、インスタンス "{d9c277a0-ed36-4f44-9fd2-6f280d8b8b38}"、操作 "C:\Windows\SYSTEM32\cmd.exe" を正常に完了しました。リターン コード: 0タスク スケジューラは、ユーザー "xxxxxxxxxx\Administrator" の "\pauge" タスクの "{d9c277a0-ed36-4f44-9fd2-6f280d8b8b38}" インスタンスを正常に完了しました。
● タスクスケジューラの設定
(全般)
タスクの実行時に使うユーザーアカウント : Administrator
ユーザーがログオンしているかどうかにかかわらず実行する
最上位特権で実行する(トリガー)
毎日 指定時間に実行対応策をご教示いただけたら幸いです。
ご回答よろしくお願い致します。2018年1月14日 12:04
すべての返信
-
hh1r0 さま 拝見しました。
環境変数もサーチパスも効かなかった記憶があります。 ドライブからのフルパス記述(直書き)に変更するとどうでしょうか?。
(サーチパスも環境変数で実現されていますから。)- 編集済み ShiroYuki_Mot 2018年1月15日 2:27 追記
2018年1月14日 15:04 -
© ウィンドウズスクリプトプログラマ - Windows Script Programmer 2018
そういうときは、バッチファイルの出力1と2をテキストファイルに出す。
タスクのファイルcmd.exe
タスクの引数/c "バッチファイルパス名" >"テキストファイルのパス名" 2&>1
タイポ 訂正/c "バッチファイルパス名" >"テキストファイルのパス名" 2>&1
- 編集済み ウィンドウズスクリプトプログラマ 2018年3月29日 8:19 タイポ
2018年1月15日 5:12 -
hh1r0 さま 拝見しました。
ユーザーがログオンしているかどうかにかかわらず実行 ではユーザーに絡む環境変数等が使えない為、
先の返信をしたのですが ... 。
残るは、後1点でしょうか。
D:\ はネットワークドライブではないですよね。
(その場合、UNC パスに変更して下さい。 これもユーザー絡みであった筈です。)違うと思うのですが、参考迄に。
ブラウザからコピペすると区切り記号の¥が html で ¥ になっていて、これが原因で、正常動作しないケースがあります。
この場合には、ちゃんと、\をタイプし直す事で正常化されます。 \ =¥ 半角2018年1月16日 1:20