एक अनुसूचित कार्य में पर्यावरण चर को एक्सेस करना


15

जब कोई निर्धारित कार्य सेट किया जाता है, तो कार्रवाई अनुभाग के लिए मैं निष्पादन योग्य के स्थान के लिए एक पर्यावरण चर पर पहुंचने की कोशिश कर रहा हूं जिसे मैं चलाना चाहता हूं। यह मुख्य रूप से है क्योंकि एक मशीन पर निष्पादन योग्य C हो सकता है: दूसरे पर यह D पर हो सकता है: मैंने सत्यापित किया है कि यदि मैं एक कठिन कोडित पथ का उपयोग करता हूं तो मेरा निर्धारित कार्य चलता है, लेकिन अगर मैं कार्य को इंगित करने "%MyAppPath%\MyApp.exe"के लिए कार्रवाई को बदलता हूं एक प्रक्षेपण विफलता पीड़ित शुरू नहीं होगा। मैंने सत्यापित किया है कि पर्यावरण चर स्थापित किया गया है।

क्या यह एक पर्यावरण चर को संदर्भित करने के लिए कार्य अनुसूची के कार्य (और कार्यशील निर्देशिका) के अंदर भी संभव है - क्या मेरा वाक्यविन्यास गलत है।

एक साइड नोट पर, मैंने BAT फ़ाइल को कॉल करने और वहां के वातावरण चर का संदर्भ देने के बारे में सोचा, लेकिन यह मेरे लिए कुछ भी हल नहीं करता है क्योंकि मुख्य मुद्दा वास्तव में ज्ञात है कि क्या एप्लिकेशन (और बैट फ़ाइल भी) C पर है: या डी: ड्राइव - ड्राइव के अंदर ही रास्ता समान है।

अद्यतन : यह पता चला है कि आप उन्हें मशीन रिबूट के साथ उपयोग कर सकते हैं लेकिन शायद एक बेहतर तरीका है

जवाबों:


23

आपको मशीन रिबूट की आवश्यकता नहीं है। आपको Taskeng.exe को समाप्त करना चाहिए और अगली बार निर्धारित कार्य चलने पर इसे एक अद्यतन वातावरण मिलेगा।


बहुत बहुत धन्यवाद mcuh! मैं इसके लिए दिनों से संघर्ष कर रहा हूं। मैं Win7 / Win2008 में कोई लाभ उठाने के लिए अनुसूचक सेवा को पुनः आरंभ करने की कोशिश कर रहा हूं (इसे पुनः आरंभ करने के लिए सिस्टम के रूप में चलाने की आवश्यकता है), लेकिन यह इतना आसान है!
तैमूर

2

मैंने सोचा था कि आप टास्क शेड्यूलर से पर्यावरण चर का संदर्भ ले सकते हैं, लेकिन सिर्फ कोशिश करने से यह आपके जैसा नहीं दिख सकता है।

एक अपवाद ऐसा प्रतीत होता है कि %PATH%क्या प्रत्येक मशीन पर अपने MyAppPathमूल्य को %PATH%संग्रह में जोड़ना संभव होगा , फिर तब MyApp.exeकार्य अनुसूचक से कॉल करें , जहां मशीन आवश्यकतानुसार पूरी तरह से योग्य पथ को हल करने में सक्षम होगी?


1
दिलचस्प है, मैंने अभी-अभी% PATH% के साथ प्रयास किया और इसे काम करने के लिए नहीं मिला। उस समय मैंने एक बेवकूफ टाइपो देखा जब मैंने% PATH% अपडेट किया। मैंने टाइपो को ठीक किया और सत्यापित किया कि PATH एक डॉस बॉक्स में ठीक था, लेकिन कार्य शेड्यूल ने समस्या को रिपोर्ट किया - यह दर्शाता है कि यह% PATH% का "खराब" संस्करण देख रहा था। रिबूटिंग को परिवर्तन लेने की आवश्यकता थी (जैसा कि आप कार्य अनुसूचक को पुनः आरंभ नहीं कर सकते हैं)। उस समय यह पता चला कि मैं अब अपने मूल पर्यावरण चर का उपयोग कर सकता हूं। इसलिए अपशॉट यह है कि आप पर्यावरण चर का उपयोग कर सकते हैं, लेकिन किसी भी परिवर्तन / नए पर्यावरण चर को लेने के लिए एक पूर्ण मशीन रिबूट की आवश्यकता होती है
पॉल हैडफील्ड

इस उत्तर के रूप में चिह्नित करेंगे जैसे कि आप सही थे कि आप उनका उपयोग कर सकते हैं, लेकिन यदि कार्य अनुसूचक ने कार्य को संशोधित करने से पहले चला दिया है / पर्यावरण चर का संदर्भ जोड़ा है, तो इसे मशीन के रिबूट की आवश्यकता होगी।
पॉल हेडफील्ड

2
Tsvayer का उत्तर देखें - आपको मशीन को रिबूट करने की आवश्यकता नहीं है। बस कार्य अनुसूचक प्रक्रिया।
बेन चैलेंजर

1

एक साइड नोट पर, मैंने BAT फ़ाइल को कॉल करने और वहां के वातावरण चर का संदर्भ देने के बारे में सोचा, लेकिन यह मेरे लिए कुछ भी हल नहीं करता है क्योंकि मुख्य मुद्दा वास्तव में ज्ञात है कि क्या एप्लिकेशन (और बैट फ़ाइल भी) C पर है: या डी: ड्राइव - ड्राइव के अंदर ही रास्ता समान है।

%~d0जहाँ बैच फ़ाइल स्थित है के ड्राइव अक्षर में विस्तार होगा। ( %~dp0ड्राइव + निर्देशिका के लिए, और इसी तरह )


1

विंडोज 7 चलाने वाले कंप्यूटर पर tsvayer का जवाब मेरे लिए काफी काम का नहीं था, लेकिन इसने मुझे सही दिशा में ला दियाटास्क शेड्यूलर मेरे कंप्यूटर पर एक सेवा लगती है; यह नाम है Schedule; प्रदर्शन नाम टास्क शेड्यूलर है

सेवा MMC से इसे फिर से शुरू करने के अलावा , इसे wmicकमांड प्रॉम्प्ट विंडो से चलाए जा रहे निम्नलिखित कमांड (प्रशासक विशेषाधिकारों के साथ) से फिर से शुरू किया जा सकता है :

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

आप निश्चित रूप से सेवा का उपयोग करके पुनः आरंभ कर सकते हैं sc:

sc stop Schedule
sc start Schedule

परीक्षण और त्रुटि के आधार पर, यह अक्षम करने और फिर किसी कार्य को फिर से सक्षम करने के लिए पर्याप्त लगता है, यदि आपको यह सब प्रभावित करना है:

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

0

एक साइड नोट पर, मैंने BAT फ़ाइल को कॉल करने और वहां के वातावरण चर का संदर्भ देने के बारे में सोचा, लेकिन यह मेरे लिए कुछ भी हल नहीं करता है क्योंकि मुख्य मुद्दा वास्तव में यह जान रहा है कि क्या एप्लिकेशन (और बैट फ़ाइल भी) C पर है: या डी: ड्राइव - ड्राइव के अंदर ही रास्ता समान है।

ग्रेविटी के उत्तर पर विस्तार करते हुए, मैं एक दो कदम प्रक्रिया का उपयोग करता हूं। यह मुझे जरूरत पड़ने पर अन्य कथनों में पथ का उपयोग करने की अनुमति देता है।

SET WD=%~dp0
pushd %WD%

नोट: pushdड्राइव और निर्देशिका दोनों को बदलता है। और अगर आप साफ होना चाहते हैं, popdजब आप कर रहे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.