การเข้าถึงตัวแปรสภาพแวดล้อมในงานที่กำหนดเวลาไว้


14

เมื่อตั้งค่างานที่กำหนดเวลาไว้สำหรับส่วนการดำเนินการฉันพยายามเข้าถึงตัวแปรสภาพแวดล้อมสำหรับตำแหน่งของไฟล์ปฏิบัติการที่ฉันต้องการเรียกใช้ นี่เป็นสาเหตุหลักเนื่องจากในเครื่องหนึ่งสิ่งที่ปฏิบัติการได้อาจอยู่ใน C: ในอีกเครื่องมันอาจจะเป็น D: ฉันได้ตรวจสอบแล้วว่าถ้าฉันใช้เส้นทางที่กำหนดรหัสยากงานที่กำหนดเวลาไว้ของฉันจะทำงาน แต่ถ้าฉันเปลี่ยนการกระทำให้ชี้ไป"%MyAppPath%\MyApp.exe"ที่งาน จะไม่เริ่มทรมานกับความล้มเหลวในการเปิดตัว ฉันตรวจสอบแล้วว่ามีการตั้งค่าตัวแปรสภาพแวดล้อม

เป็นไปได้ไหมในส่วนการทำงาน (และไดเรกทอรีทำงาน) ของตารางงานเพื่ออ้างอิงตัวแปรสภาพแวดล้อม - เป็นไวยากรณ์ของฉันผิด

ในหมายเหตุด้านฉันคิดเกี่ยวกับการเรียกไฟล์ BAT และอ้างอิงตัวแปรสภาพแวดล้อมที่นั่น แต่นั่นไม่ได้แก้ปัญหาใด ๆ สำหรับฉันเนื่องจากปัญหาหลักคือการทราบว่าแอปพลิเคชัน (และไฟล์ bat) อยู่ใน C หรือไม่: หรือ D: ไดรฟ์ - ภายในตัวไดรฟ์เองเส้นทางจะเหมือนกัน

ปรับปรุง : ปรากฎว่าคุณสามารถใช้พวกเขากับเครื่องรีบูต แต่อาจมีวิธีที่ดีกว่า

คำตอบ:


23

คุณไม่จำเป็นต้องรีบูตเครื่อง คุณควรยกเลิก Taskeng.exe และการเรียกใช้งานตามกำหนดเวลาครั้งต่อไปจะได้รับสภาพแวดล้อมที่ได้รับการปรับปรุง


ขอบคุณมาก mcuh! ฉันดิ้นรนกับมันมาหลายวันแล้ว ฉันพยายามเริ่มบริการ Scheduler เพื่อไม่ให้เกิดประโยชน์ใน Win7 / Win2008 (จำเป็นต้องเรียกใช้ในฐานะระบบเพื่อเริ่มต้นใหม่) แต่นี่ง่ายกว่ามาก!
Timur

2

ฉันคิดว่าคุณสามารถอ้างอิงตัวแปรสภาพแวดล้อมจากตัวกำหนดเวลางานได้ แต่เมื่อลองแล้วจะไม่ได้ดูเหมือนว่าคุณจะทำได้

ข้อยกเว้นเดียวดูเหมือนว่า%PATH%จะเป็นไปได้ที่จะเพิ่มMyAppPathมูลค่าของคุณไปยัง%PATH%คอลเลกชันในแต่ละเครื่องจากนั้นเพียงโทรMyApp.exeจาก task scheduler ซึ่งเครื่องจะสามารถแก้ไขเส้นทางที่ผ่านการรับรองตามที่ต้องการได้หรือไม่


1
น่าสนใจฉันเพิ่งลองกับ% PATH% และไม่สามารถใช้งานได้ ณ จุดนั้นฉันสังเกตเห็นตัวพิมพ์ที่โง่เมื่อฉันอัปเดต% PATH% ฉันแก้ไขตัวพิมพ์ผิดและตรวจสอบว่า PATH นั้นตกลงในกล่อง DOS แต่งานที่กำหนดไว้ยังคงรายงานปัญหา - ระบุว่าพบ% PATH% รุ่น "ไม่ดี" จำเป็นต้องรีบูตเครื่องเพื่อรับการเปลี่ยนแปลง (เนื่องจากคุณไม่สามารถรีสตาร์ทตัวกำหนดเวลางาน) ณ จุดนั้นมันกลายเป็นว่าตอนนี้ฉันสามารถใช้ตัวแปรสภาพแวดล้อมเดิมของฉัน ดังนั้นผลที่สุดก็คือคุณสามารถใช้ตัวแปรสภาพแวดล้อมได้ แต่จำเป็นต้องรีบูตเครื่องเต็มเพื่อรับการเปลี่ยนแปลงใด ๆ / ตัวแปรสภาพแวดล้อมใหม่
Paul Hadfield

จะทำเครื่องหมายนี่เป็นคำตอบตามที่คุณถูกต้องที่คุณสามารถใช้ได้ แต่ถ้า task scheduler รันก่อนที่คุณจะแก้ไขงาน / เพิ่มการอ้างอิงไปยังตัวแปรสภาพแวดล้อมมันจะต้องรีบูตเครื่อง
Paul Hadfield

2
ดูคำตอบของ tsvayer - คุณไม่จำเป็นต้องรีบูตเครื่อง เพียงแค่กระบวนการจัดตารางงาน
Ben Challenor

1

ในหมายเหตุด้านฉันคิดเกี่ยวกับการเรียกไฟล์ BAT และอ้างอิงตัวแปรสภาพแวดล้อมที่นั่น แต่นั่นไม่ได้แก้ปัญหาใด ๆ สำหรับฉันเนื่องจากปัญหาหลักคือการทราบว่าแอปพลิเคชัน (และไฟล์ bat) อยู่ใน C หรือไม่: หรือ D: ไดรฟ์ - ภายในตัวไดรฟ์เองเส้นทางจะเหมือนกัน

%~d0จะขยายเป็นอักษรระบุไดรฟ์ซึ่งเป็นที่ตั้งของไฟล์แบตช์ ( %~dp0สำหรับไดรฟ์ + ไดเรกทอรีและอื่น ๆ )


1

คำตอบของ tsvayerไม่ได้ผลสำหรับฉันบนคอมพิวเตอร์ที่ใช้ Windows 7 แต่มันชี้ไปในทิศทางที่ถูกต้อง ดูเหมือนว่าTask Schedulerจะเป็นบริการในคอมพิวเตอร์ของฉัน มันเป็นชื่อSchedule; ชื่อที่แสดงคือTask Schedulerตัวกำหนดเวลางาน

นอกเหนือจากการรีสตาร์ทจากServices 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 และอ้างอิงตัวแปรสภาพแวดล้อมที่นั่น แต่นั่นไม่ได้แก้ปัญหาใด ๆ สำหรับฉันเนื่องจากปัญหาหลักคือการรู้ว่าแอปพลิเคชัน (และไฟล์ bat) อยู่ใน C หรือไม่: หรือ D: ไดรฟ์ - ภายในตัวไดรฟ์เองเส้นทางจะเหมือนกัน

เมื่อขยายคำตอบของ grawity ฉันใช้กระบวนการสองขั้นตอน สิ่งนี้ทำให้ฉันสามารถใช้เส้นทางในงบอื่น ๆ เมื่อจำเป็น

SET WD=%~dp0
pushd %WD%

หมายเหตุ: pushdเปลี่ยนทั้งไดรฟ์และไดเรกทอรี และถ้าคุณต้องการที่จะสะอาดpopdเมื่อคุณทำเสร็จแล้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.