Mengakses Variabel Lingkungan dalam Tugas Terjadwal

14

Saat menyiapkan tugas yang dijadwalkan, untuk bagian tindakan saya mencoba mengakses variabel lingkungan untuk lokasi yang dapat dieksekusi yang ingin saya jalankan. Ini terutama karena pada satu mesin yang dapat dieksekusi bisa di C: di lain itu bisa di D: Saya sudah memverifikasi bahwa jika saya menggunakan jalur kode keras tugas terjadwal saya berjalan, tetapi jika saya mengubah tindakan untuk menunjuk ke "%MyAppPath%\MyApp.exe"tugas tidak akan mulai mengalami kegagalan peluncuran. Saya telah memverifikasi bahwa variabel lingkungan sudah diatur.

Apakah mungkin di dalam bagian tindakan (dan direktori kerja) dari jadwal tugas untuk merujuk variabel lingkungan - apakah sintaksis saya salah.

Sebagai catatan, saya memang berpikir untuk memanggil file BAT dan merujuk variabel lingkungan di sana, tetapi itu tidak menyelesaikan apa pun bagi saya karena masalah utama sebenarnya adalah mengetahui apakah aplikasi (dan file bat juga) ada di C: atau D: drive - di dalam drive itu sendiri jalannya sama.

UPDATE : Ternyata Anda dapat menggunakannya dengan reboot mesin tapi mungkin ada cara yang lebih baik

Paul Hadfield
sumber

Jawaban:

23

Anda tidak perlu me-reboot mesin. Anda harus menghentikan Taskeng.exe dan waktu berikutnya tugas yang dijadwalkan dijalankan itu akan mendapatkan lingkungan yang diperbarui.

tsvayer
sumber
Terima kasih, mcuh! Saya sudah berjuang dengan itu selama berhari-hari. Saya sudah mencoba untuk me-restart layanan Penjadwal tetapi tidak berhasil di Win7 / Win2008 (perlu dijalankan sebagai SISTEM untuk memulai kembali), tetapi ini jauh lebih sederhana!
Timur
2

Saya pikir Anda bisa mereferensikan variabel lingkungan dari Penjadwal Tugas, tetapi baru saja mencoba, sepertinya Anda tidak bisa.

Satu pengecualian tampaknya %PATH%demikian, apakah mungkin untuk menambahkan MyAppPathnilai Anda ke %PATH%koleksi di setiap mesin, lalu panggil saja MyApp.exedari penjadwal tugas, di mana mesin akan dapat menyelesaikan jalur yang sepenuhnya memenuhi syarat seperti yang diperlukan?

Stuart McLaughlin
sumber
1
Menarik, saya hanya mencoba dengan% PATH% dan tidak bisa berfungsi. Pada saat itu saya melihat kesalahan ketik yang bodoh ketika saya memperbarui% PATH%. Saya memperbaiki kesalahan ketik dan memverifikasi bahwa PATH baik-baik saja dalam kotak DOS, tetapi tugas yang dijadwalkan masih melaporkan masalah - menunjukkan itu melihat versi "buruk" dari% PATH%. Reboot diperlukan untuk mengambil perubahan (karena Anda tidak dapat memulai kembali penjadwal tugas). Pada titik itu ternyata saya sekarang dapat menggunakan variabel lingkungan asli saya. Jadi hasilnya adalah Anda dapat menggunakan variabel lingkungan, tetapi reboot mesin penuh diperlukan untuk mengambil perubahan / variabel lingkungan baru
Paul Hadfield
Akan menandai ini sebagai jawaban karena Anda benar bahwa Anda dapat menggunakannya tetapi jika penjadwal tugas telah berjalan sebelum Anda memodifikasi pekerjaan / menambahkan referensi ke variabel lingkungan, itu akan membutuhkan reboot mesin.
Paul Hadfield
2
Lihat jawaban tsvayer - Anda tidak perlu me-reboot mesin. Hanya proses penjadwal tugas.
Ben Challenor
1

Sebagai catatan, saya memang berpikir untuk memanggil file BAT dan merujuk variabel lingkungan di sana, tetapi itu tidak menyelesaikan apa pun bagi saya karena masalah utama sebenarnya adalah mengetahui apakah aplikasi (dan file bat juga) ada di C: atau D: drive - di dalam drive itu sendiri jalannya sama.

%~d0akan meluas ke huruf drive tempat file batch berada. ( %~dp0untuk direktori drive +, dan sebagainya. )

pengguna1686
sumber
1

Jawaban tsvayer tidak cukup untuk saya, di komputer yang menjalankan Windows 7, tetapi itu mengarahkan saya ke arah yang benar. Penjadwal Tugas tampaknya merupakan layanan di komputer saya; namanya adalah Schedule; nama tampilan adalah Penjadwal Tugas .

Selain memulai ulang dari Layanan MMC, itu dapat dimulai kembali dengan wmicperintah berikut dijalankan dari jendela Prompt Perintah (dengan hak administrator):

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

Tentu saja Anda juga dapat memulai ulang layanan menggunakan sc:

sc stop Schedule
sc start Schedule

Berdasarkan coba-coba, tampaknya cukup untuk menonaktifkan dan mengaktifkan kembali satu tugas, jika hanya itu yang perlu Anda pengaruhi:

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

Di samping catatan, saya berpikir tentang memanggil file BAT dan referensi variabel lingkungan di sana, tapi itu tidak menyelesaikan apa pun bagi saya karena masalah utama sebenarnya mengetahui apakah aplikasi (dan file bat juga) ada di C: atau D: drive - di dalam drive itu sendiri jalannya sama.

Memperluas jawaban grawity, saya menggunakan proses dua langkah. Ini memungkinkan saya untuk menggunakan jalur dalam pernyataan lain saat dibutuhkan.

SET WD=%~dp0
pushd %WD%

CATATAN: pushdmengubah drive dan direktori. Dan jika Anda ingin bersih, popdsetelah selesai.

Richard
sumber