कमांड प्रॉम्प्ट का उपयोग करते हुए कमांड प्रॉम्प्ट की पृष्ठभूमि में बैच फ़ाइल चलाएं


0

मैं काम पर घंटों के लिए एक विंडोज़ कमांड प्रॉम्प्ट का उपयोग कर रहा हूं, और मैं चीजों को मसाला देना चाहता हूं। मैं चाहता हूं कि मेरा टेक्स्ट रंग हर 1 सेकंड में रंग बदले। मेरे पास एक बैच स्क्रिप्ट है जो ऐसा करती है।

@echo off
set NUM=0 1 2 3 4 5 6 7 8 9 A B C D E F
for %%x in (%NUM%) do ( 
    for %%y in (%NUM%) do (
        color %%x%%y
        timeout 1 >nul
    )
)

यह हर पल मेरे अग्रभूमि या पृष्ठभूमि का रंग बदलता है। हालाँकि, मैं चाहता हूं कि जब भी मैं अपने कमांड प्रॉम्प्ट शॉर्टकट को खोलूं तो यह बैच स्क्रिप्ट स्वचालित रूप से चले। इसलिए मेरे शॉर्टकट गुणों में, मैंने इसे "लक्ष्य" निर्धारित किया:

शॉर्टकट लक्ष्य:

C: \ Windows \ system32 \ cmd.exe / k ऑटो-परिवर्तन-टेक्स्ट-color.bat

यह अपेक्षित रूप से काम करता है, लेकिन क्योंकि बैच फ़ाइल चल रही है, मैं कमांड प्रॉम्प्ट का उपयोग नहीं कर सकता। और इसके बजाय मैं सिर्फ एक बार पृष्ठभूमि के रंग को बदलते हुए देखता हूं।

क्या पृष्ठभूमि में इसे चलाने और रंग बदलने के दौरान कमांड प्रॉम्प्ट का उपयोग जारी रखने का कोई तरीका है?

यदि नहीं, तो क्या कोई और तरीका है जो मैं करना चाहता हूं? शायद जावा, पर्ल, या एक बैच फ़ाइल के अलावा कुछ के साथ?

आपके सहयोग के लिए धन्यवाद।

जवाबों:


1

यह थोड़ा मुश्किल है, क्योंकि आप नहीं चाहते कि पृष्ठभूमि रंग बदलने की प्रक्रिया आपके किसी कंसोल इनपुट को बाधित करे। आप TIMEOUT कमांड के लिए / NOBREAK विकल्प जोड़ सकते हैं, जैसे कि स्क्रिप्ट कभी भी स्टड नहीं पढ़ता है, सिवाय इसके कि यह अभी भी एक <CTRL-Break>इंटरप्ट प्रक्रिया कर सकता है , और पूछ सकता है कि क्या आप स्क्रिप्ट को समाप्त करना चाहते हैं। उपयोगकर्ता Yपृष्ठभूमि प्रक्रिया के साथ प्रतिक्रिया कर सकता है और समाप्त कर सकता है, लेकिन यह भ्रमित हो सकता है यदि मुख्य प्रक्रिया में एक रनिंग बैच स्क्रिप्ट भी हो। किस प्रक्रिया से इनपुट मिलता है?

आप पृष्ठभूमि की प्रक्रिया के लिए स्टड को रीडायरेक्ट कर सकते हैं, लेकिन इनपुट पुनर्निर्देशित होने पर टाइमटाइम विफल हो जाता है।

मैंने आपके ऑटो-चेंज-टेक्स्ट-color.bat को टाइमटाइम के बजाय पिंग देरी का उपयोग करने के लिए संशोधित किया, इस प्रकार स्टड को एनयूएल पर पुनर्निर्देशित करने की अनुमति मिलती है। मैंने एक और पठनीय रंग संयोजन के साथ समाप्त करने के लिए अंत में एक अंतिम रंग आदेश भी रखा।

@echo off
set NUM=0 1 2 3 4 5 6 7 8 9 A B C D E F
for %%x in (%NUM%) do (
  for %%y in (%NUM%) do (
    color %%x%%y
    >nul ping localhost -n 2
  )
)
color 07

निम्नलिखित कमांड का उपयोग पृष्ठभूमि को स्क्रिप्ट को स्टड के साथ रीडायरेक्ट करने के लिए nul में करने के लिए किया जाता है:

start "" /b cmd /c "auto-change-text-color.bat <nul"

केवल विषम साइड इफेक्ट यह है कि पृष्ठभूमि प्रक्रिया अभी भी प्राप्त कर सकती है <CTRL-Break>, और यह संदेश को प्रिंट करता है Terminate batch job (Y/N)?, लेकिन इनपुट के इंतजार के बिना तुरंत जारी रहता है। इसलिए आप सुरक्षित रूप से मुख्य प्रक्रिया में एक बैच स्क्रिप्ट शुरू कर सकते हैं, <CTRL-Break>दो टर्मिनेट संदेश प्राप्त कर सकते हैं, और वाई या एन को दबा सकते हैं, यह जानते हुए कि आपकी मुख्य प्रक्रिया में केवल बैच स्क्रिप्ट ही जवाब देगी (समाप्त या नहीं)।


1
superuser.com/questions/345602/… इस अंक को भी शामिल करता है
K7AAY

@ K7AAY - ऊह, दिलचस्प है। मुझे पता नहीं था कि <Ctrl-C>पृष्ठभूमि प्रक्रिया के लिए अक्षम है। मैंने अपने जवाब को अद्यतन करने के लिए अद्यतन किया कि केवल <Ctrl-Break>काम करता है।
डेबनहम

इसके लिए @debham आपको बहुत-बहुत धन्यवाद। मैं इसे अपनी पसंद के लिए धन्यवाद के साथ पूरा करने में सक्षम था। मैंने अपनी अंतिम बैच फ़ाइल और कमांड का विस्तार करने के लिए खुद का उत्तर दिया।
user1776193

@dbenham क्या आप स्क्रिप्ट को कॉन्फ़िगर करने के लिए मेरे लिए एक तरीका सोच सकते हैं, या इसे इस तरह से कर सकते हैं कि मैं स्क्रिप्ट को रोक (या रंग बदलने) को रोक सकता हूं, और शायद इसे फिर से शुरू कर दूं? इसे रोकना काफी होगा, लेकिन इसे फिर से शुरू करना दोगुना होगा। सब कुछ के लिए फिर से धन्यवाद। इस प्यार करता हूँ! i.minus.com/iZC4WapYtRVad.gif
user1776193

@ user1776193 - बहुत सरल :-) आपके लूप में एक छोटा परिवर्तन if not exist "somePath\pauseColor.signal" color%%X%%Y:। अब आप फ़ाइल बनाकर रोक सकते हैं, और फ़ाइल को हटाकर फिर से शुरू कर सकते हैं।
दांभम

1

निम्न आदेश वह करेगा जो आप चाहते हैं:

start /b "" "%COMSPEC%" /c auto-change-text-color.bat

यह सक्रिय कंसोल विंडो की पृष्ठभूमि में चल रही CMD.EXE(या जो कुछ भी COMSPECहै) का एक उदाहरण प्रारंभ करेगा , auto-change-text-color.batजब तक कि बैच फ़ाइल समाप्त नहीं हो जाती, तब तक निष्पादित होता है, जिस समय पृष्ठभूमि CMD.EXEसमाप्त हो जाएगी।


बंद करें, लेकिन बैकग्राउंड प्रोसेस इंटरसेप्टिंग कंसोल इनपुट के साथ समस्याएँ हैं। मेरा जवाब
dbenham 19

थैंक्स टू गेदरुडी। जब मैंने आपका जवाब देखा तो मैं तुरंत काम पर लग गया।
user1776193

0

आपकी मदद के लिए @dbenham और @Woody को धन्यवाद। आपके उत्तरों का उपयोग करके मैं वही कर पाया जो मैं करना चाहता था।

मैंने इसे अपने ऑटो-चेंज-टेक्स्ट-color.bat कमांड के रूप में उपयोग करते हुए समाप्त कर दिया, क्योंकि मैंने केवल टेक्स्ट को बदलने के लिए चाहा था, यह चाहता था कि यह हमेशा के लिए चले, और कुछ रंगों से छुटकारा पा लिया, जो अच्छी तरह से नहीं दिखते थे सफेद (एफ) पृष्ठभूमि:

@echo off
:loop
set NUM=0 1 2 3 4 5 6 8 9 A B C
for %%x in (%NUM%) do ( 
    color F%%x
    >nul ping localhost -n 4
)
goto loop

मेरे विंडोज कमांड प्रॉम्प्ट शॉर्टकट के लिए, यह मेरी विकास निर्देशिका में शुरू होता है, और "लक्ष्य" है:

%COMSPEC% /t:F9 /s /k cd scripts && start /b %COMSPEC% /c auto-change-text-color.bat <nul && cd .. && env

यह मेरे विकास पर्यावरण की स्क्रिप्ट निर्देशिका में खुलता है, मेरी स्क्रिप्ट फ़ोल्डर में संग्रहीत पृष्ठभूमि में रंग बदलने वाली स्क्रिप्ट चलाता है, फिर मूल फ़ोल्डर में वापस जाता है और मेरे सभी पर्यावरण चर को सेट करते हुए एक और बैच फ़ाइल चलाता है। यह एकदम सही है। फिर से धन्यवाद!


-1

लिनक्स में, (ampersand) का उपयोग बैकग्राउंड टास्क को चलाने के लिए किया जाता है। मुझे विन पर कोई पता नहीं है, लेकिन कोशिश करोC:\Windows\system32\cmd.exe /k auto-change-text-color.bat &


आप सही हैं, आपके पास विंडोज पर कोई विचार नहीं है। &यह यूनिक्स पर क्या करता है, इसलिए यह जवाब बेकार है। देखें ss64.com/nt/syntax-redirection.html
DavidPostill

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