मैं एक बैच फ़ाइल कैसे बनाऊं जिसने प्रक्रिया को समाप्त करने के लिए प्रतीक्षा करने के लिए एक प्रक्रिया शुरू की?


3

मेरा कंप्यूटर सबसे अच्छा नहीं है, लेकिन यह GTA V खेलने के लिए न्यूनतम आवश्यकताएं पूरी करता है । मैं सामान्य .exe का उपयोग करने के बजाय खेल को तेज़ी से चलाना चाहता था, यह बैच फ़ाइल है जिसका उपयोग मैं गेम लॉन्च करने के लिए करता हूं:

start steam://rungameid/271590 
timeout 60
wmic process where name="GTA5.exe" CALL setpriority "high priority"
wmic process where name="gtavlauncher.exe" CALL setpriority "idle"
wmic process where name="subprocess.exe" CALL setpriority "idle"

इसलिए मूल रूप से गेम लॉन्च करने के बाद यह प्राथमिकताओं को सेट करता है इसलिए केवल GTA5.exe चलता है और सीपीयू इसके साथ आने वाली अन्य प्रक्रियाओं को अनदेखा करता है। मैं चाहता था कि यह और भी सुचारू रूप से चले और विंडोज़ थीम को "क्लासिक" में बदलने में मदद मिले, इसलिए मैंने एक प्रोग्राम डाउनलोड किया जो मुझे cmd कमांड के साथ थीम बदलने की अनुमति देता है और मैंने यह स्क्रिप्ट बनाई-

START c:\ThemeSwitcher classic
start steam://rungameid/271590 
timeout 60
wmic process where name="GTA5.exe" CALL setpriority "high priority"
wmic process where name="gtavlauncher.exe" CALL setpriority "idle"
wmic process where name="subprocess.exe" CALL setpriority "idle"
wait process where name="GTA5.exe" 
-----------------------------------------------------------
start c:\ThemeSwitcher MY PC

"----------" में, मैं कुछ ऐसा रखना चाहता हूं जो विषय को सामान्य में बदलने से पहले फाइल को प्रक्रियाओं को समाप्त करने की प्रतीक्षा करता है, इसलिए मुझे इसे मैन्युअल रूप से करने की आवश्यकता नहीं है। मैं केवल कुछ बैच कमांड जानता हूं जिनके लिए मैंने Google का उपयोग किया था, और अभी यह मदद नहीं करता है। त्रुटिपूर्ण अंग्रेजी के लिए माफ करें।

जवाबों:


1

इस तरह बैच बनाएं:

title i'm waiting
start /wait /high cmd /ktitle kill me 
echo This is the end 
pause

आप देख सकते हैं कि पैरामीटर के startसाथ कार्य कमांड कैसे हैwait

आप pauseबैच विंडो में कुछ हिट स्पेस करने के बाद बैच बना सकते हैं, फिर यह अगला कमांड चलाता है

आप शायद कुछ इस तरह की तलाश में हैं waiting for terminate existing process:

echo do somthing at start
:start_test
::wait ~6s -1s = 5s
::you can use TIMEOUT 5
call :sleep 6
wmic process where name="notepad.exe" get name |find "notepad.exe">nul
if %errorlevel%==0 goto :start_test
echo do somthing at the end
::pause
goto :eof

:sleep
ping 127.0.0.1 -n %1 > nul
goto :eof

यह परीक्षण प्रक्रिया हर 5s में मौजूद है, आप अंतराल को बदल सकते हैं।


0

एक और दृष्टिकोण जो केवल एक नई प्रक्रिया शुरू करता है, वह है PowerShell का उपयोग करना!

आप Get-Processcmdlet के साथ नाम से एक प्रक्रिया पा सकते हैं । प्रत्येक प्रक्रिया ऑब्जेक्ट में एक WaitForExitविधि है, जैसा कि उम्मीद की जा सकती है, जब तक कि प्रक्रिया बंद नहीं हो जाती। इसलिए, इस PowerShell आदेश तक रखती हूँ GTA5.exe, gtavlauncher.exeऔर subprocess.exeबाहर निकलने:

Get-Process 'gta5', 'gtavlauncher', 'subprocess' | % {$_.WaitForExit()}

यह उन नामों के साथ सभी प्रक्रियाओं को ढूंढता है और प्रत्येक के बाहर निकलने का इंतजार करता है। जब तक वे सभी चले नहीं जाते, तब तक संकेत वापस नहीं आएगा।

आप PowerShell को उस कमांड को लॉन्च करके एक बैच स्क्रिप्ट को ब्लॉक करने के लिए इसका उपयोग कर सकते हैं (मैंने एक उपनाम का उपयोग करके इसे थोड़ा छोटा कर दिया है:)

powershell -command "gps 'gta5','gtavlauncher','subprocess'|%{$_.WaitForExit()}"

एक बार प्रक्रिया से बाहर निकलने के बाद, PowerShell आपके बैच स्क्रिप्ट पर नियंत्रण से बाहर निकल जाएगी और नियंत्रण वापस कर देगी।

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