web-dev-qa-db-ja.com

スケジュールされたタスクでの環境変数へのアクセス

スケジュールされたタスクを設定するとき、アクションセクションで、実行したい実行可能ファイルの場所の環境変数にアクセスしようとしています。これは主に、あるマシンでは実行可能ファイルがCにある可能性があるためです。別のマシンではDにある可能性があります。ハードコードされたパスを使用すると、スケジュールされたタスクが実行されることを確認しましたが、アクションを変更して"%MyAppPath%\MyApp.exe"タスクは、起動に失敗して開始されません。環境変数が設定されていることを確認しました。

タスクスケジュールのアクション(および作業ディレクトリ)の部分で環境変数を参照することも可能ですか?構文が間違っていますか?.

副次的に、私はBATファイルを呼び出してそこで環境変数を参照することを考えましたが、主な問題は実際にアプリケーションかどうかを知っているため(そしてバットファイルも)はC:またはD:ドライブにあります-ドライブ自体の中のパスは同じです

[〜#〜] update [〜#〜]:マシンの再起動でそれらを使用できることがわかりましたが、おそらくより良い方法があります

16
Paul Hadfield

マシンを再起動する必要はありません。 Taskeng.exeを終了すると、次にスケジュールされたタスクが実行されたときに、更新された環境が取得されます。

24
tsvayer

タスクスケジューラから環境変数を参照できると思いましたが、試してみたところ、できません。

1つの例外は%PATH%のように見えるので、MyAppPath値を各マシンの%PATH%コレクションに追加して、タスクからMyApp.exeを呼び出すことができます。スケジューラは、マシンが必要に応じて完全修飾パスを解決できる場所ですか?

2

余談ですが、私はBATファイルを呼び出してそこで環境変数を参照することを考えましたが、主な問題はアプリケーション(およびbatファイルも)がCにあるかどうかを実際に認識しているため、何も解決しません:またはD:ドライブ-ドライブ自体のパスは同じです。

%~d0は、バッチファイルがあるドライブ文字に展開されます。 (%~dp0 for drive + directory、 など

1
user1686

tsvayerの答え は、Windows 7を実行しているコンピューターではうまく機能しませんでしたが、正しい方向に向けられました。 タスクスケジューラは私のコンピュータ上のサービスのようです。名前はScheduleです。表示名はTask Schedulerです。

ServicesMMCから再起動することに加えて、コマンドプロンプトウィンドウから実行される次のwmicコマンドを使用して再起動できます(管理者権限が必要です) ):

wmic service where "name='Schedule'" call StopService
wmic service where "name='Schedule'" call StartService

もちろん、scを使用してサービスを再起動することもできます。

sc stop Schedule
sc start Schedule

試行錯誤に基づいて、影響を与える必要があるすべての場合、1つのタスクを無効にしてから再度有効にするだけで十分だと思われます。

schtasks /Change /TN \"The name of the task\" /DISABLE
schtasks /Change /TN \"The name of the task\" /ENABLE
1
Kenny Evitt

余談ですが、私はBATファイルを呼び出してそこで環境変数を参照することを考えましたが、主な問題は実際にアプリケーション(およびbatファイルも)がCにあるかどうかを知っているためです。またはD:ドライブ-ドライブ自体の中のパスは同じです。

グラウィティの答えを拡張して、私は2段階のプロセスを使用します。これにより、必要に応じて他のステートメントでパスを使用できます。

SET WD=%~dp0
pushd %WD%

注:pushdは、ドライブとディレクトリの両方を変更します。そして、あなたがきれいになりたかったら、終わったらpopd

0
Richard

サービスを再起動することも、TaskEng.exeを終了することも、繰り返されるタスクでは機能しませんでした。タスクは1回限り/毎日/毎週などとして作成できますが、その中でタスクを繰り返すこともできます。日中10分ごとに繰り返される毎日のタスク。この「サブ」繰り返し間隔が設定されている場合、再起動するまで新しい環境変数を取得しません。例外は、設定された間隔で繰り返す「1回限りの」タスクがある場合です。この場合、環境変数が取得されます。

したがって、回避策として、1時間ごとに繰り返される「毎日」のタスクを、1時間ごとに無限に繰り返される1回限りのタスクに置き換えることができました。

0