Zamanlanmış Görevde Ortam Değişkenlerine Erişme


15

Zamanlanmış bir görev ayarlarken, eylem bölümü için çalıştırmak istediğiniz yürütülebilir dosyanın konumu için bir ortam değişkenine erişmeye çalışıyorum. Diğerinde de D olabilir: Ben sert kodlu patikayı benim zamanlanmış görev çalışır kullanırsanız, ama ben noktaya eylemi değiştirirseniz doğrulandıktan bir makinede çalıştırılabilir C olabilir ağırlıklı olmasıdır "%MyAppPath%\MyApp.exe"görev başlatma hatası almaya başlamaz. Ortam değişkeninin kurulduğunu doğruladım.

Görev çizelgesinin eylem (ve çalışma dizini) bölümünde bile bir ortam değişkenine başvurmak mümkün mü - benim sözdizimim yanlış.

Yan not etmek gerekirse, bir BAT dosyasını çağırmayı ve orada ortam değişkenini referans almayı düşündüm, ancak ana sorun aslında uygulamanın (ve yarasa dosyasının da) C'de olup olmadığını bildiği için benim için hiçbir şeyi çözmez: veya D: sürücüler - sürücünün içinde yol aynıdır.

GÜNCELLEME : Bunları bir makine yeniden başlatmayla kullanabileceğiniz ortaya çıkıyor, ancak belki de daha iyi bir yol var

Yanıtlar:


23

Makineyi yeniden başlatmanıza gerek yoktur. Taskeng.exe'yi sonlandırmalısınız ve bir sonraki zamanlanmış görev çalıştırıldığında güncelleştirilmiş bir ortam elde edersiniz.


Çok teşekkür ederim mcuh! Günlerdir bununla mücadele ediyorum. Ben Win7 / Win2008 boşuna (yeniden başlatmak için SİSTEM olarak çalıştırmak gerekir) için Zamanlayıcı hizmetini yeniden başlatmak için çalışıyorum, ama bu çok daha basit!
Timur

2

Görev Zamanlayıcı'dan ortam değişkenlerine başvurabileceğinizi düşündüm, ancak yeni denedikten sonra yapabileceğiniz gibi görünmüyor.

Tek istisna olduğu gibi , her makinedeki koleksiyona değerinizi %PATH%eklemek mümkün olacak , daha sonra sadece makinenin tam nitelikli yolu gerektiği gibi çözebileceği görev zamanlayıcıdan arayın ?MyAppPath%PATH%MyApp.exe


1
İlginç,% PATH% ile denedim ve işe yaramadım. Bu noktada,% PATH% değerini güncellediğimde aptal bir yazım hatası fark ettim. Yazım hatası düzeltildi ve DOS kutusunda PATH'ın Tamam olduğunu doğruladım, ancak zamanlanan görev yine de% PATH% "kötü" sürümünü gördüğünü belirten sorunu bildirdi. Değişikliği almak için yeniden başlatma gerekiyordu (görev zamanlayıcısını yeniden başlatamadığınız için). Bu noktada artık orijinal ortam değişkenimi kullanabilirim. Sonuç olarak, ortam değişkenlerini kullanabiliyorsunuz, ancak değişiklikleri / yeni ortam değişkenlerini almak için makinenin tamamen yeniden başlatılması gerekiyor
Paul Hadfield

Bunu, doğru şekilde kullanabileceğiniz bir yanıt olarak işaretler, ancak görev zamanlayıcısı işi değiştirmeden / referansı bir ortam değişkenine eklemeden önce çalıştırıldıysa, makinenin yeniden başlatılması gerekir.
Paul Hadfield

2
Tsvayer'in cevabına bakın - makineyi yeniden başlatmanız gerekmez. Sadece görev zamanlayıcı süreci.
Ben Challenor

1

Yan not etmek gerekirse, bir BAT dosyasını çağırmayı ve orada ortam değişkenini referans almayı düşündüm, ancak ana sorun aslında uygulamanın (ve yarasa dosyasının da) C'de olup olmadığını bildiği için benim için hiçbir şeyi çözmez: veya D: sürücüler - sürücünün içinde yol aynıdır.

%~d0toplu iş dosyasının bulunduğu sürücü harfine genişler. ( %~dp0sürücü + dizini vb. için. )


1

tsvayer'in yanıtı , Windows 7 çalıştıran bir bilgisayarda benim için pek işe yaramadı, ancak beni doğru yönde gösterdi. Görev Zamanlayıcı bilgisayarımda bir hizmet gibi görünüyor; adı Schedule; görünen ad Görev Zamanlayıcı'dır .

Hizmetler MMC'sinden yeniden başlatmanın yanı sıra , wmicKomut İstemi penceresinden (yönetici ayrıcalıklarıyla) çalıştırılan aşağıdaki komutlarla yeniden başlatılabilir :

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

Elbette aşağıdakileri kullanarak hizmeti yeniden başlatabilirsiniz sc:

sc stop Schedule
sc start Schedule

Deneme yanılma yöntemine bağlı olarak, tek bir görevi devre dışı bırakmak ve sonra yeniden etkinleştirmek yeterlidir, eğer tek yapmanız gereken bu ise:

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

0

Yan not etmek gerekirse, bir BAT dosyasını çağırmayı ve orada ortam değişkenini referans almayı düşündüm, ancak asıl sorun aslında uygulamanın (ve yarasa dosyasının da) C'de olup olmadığını bildiği için benim için bir şey çözmüyor: veya D: sürücüler - sürücünün içinde yol aynıdır.

Grawity'nin cevabına genişleyerek iki aşamalı bir süreç kullanıyorum. Bu, gerektiğinde yolu diğer ifadelerde kullanmama izin veriyor.

SET WD=%~dp0
pushd %WD%

NOT: pushdhem sürücüyü hem de dizini değiştirir. Ve eğer temiz olmak popdistiyorsan, bittiğinde.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.