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


14

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

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

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

更新:マシンの再起動で使用できることがわかりましたが、おそらくより良い方法があります

回答:


23

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


ありがとうございます!私は何日もそれに苦労してきました。Win7 / Win2008ではスケジューラサービスを再起動しようとしていました(再起動するにはSYSTEMとして実行する必要があります)が、これは非常に簡単です!
ティムール

2

タスクスケジューラから環境変数を参照できると思いましたが、試したばかりのように見えません。

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


1
興味深いことに、%PATH%を試してみましたが、動作させることができませんでした。その時点で、%PATH%を更新したときに愚かな誤植に気づきました。タイプミスを修正し、DOSボックスでPATHに問題がないことを確認しましたが、スケジュールされたタスクで引き続き問題が報告されました。変更を有効にするには再起動が必要でした(タスクスケジューラを再起動できないため)。その時点で、元の環境変数を使用できるようになりました。そのため、環境変数を使用できますが、変更/新しい環境変数を取得するには完全なマシンの再起動が必要です
Paul Hadfield

あなたがそれらを使用できることは正しいので、これを答えとしてマークしますが、ジョブを変更したり環境変数への参照を追加する前にタスクスケジューラが実行された場合、マシンの再起動が必要になります。
ポールハドフィールド

2
tsvayerの答えをご覧ください-マシンを再起動する必要はありません。タスクスケジューラプロセスだけです。
ベンチャレナー

1

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

%~d0バッチファイルがある場所のドライブ文字に展開されます。(%~dp0ドライブ+ディレクトリなどの場合


1

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

サービス MMC から再起動するほか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

0

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

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

SET WD=%~dp0
pushd %WD%

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.