मैं Windows CMD में एक पंक्ति में दो आदेश कैसे चला सकता हूं?




batch-file command-line (13)

नहीं, cd / && tree && echo %time% । प्रतिबिंबित समय उस समय पर होता है जब पहला आदेश निष्पादित होता है।

पाइपिंग में कुछ मुद्दा है, लेकिन जब तक लोग जानते हैं कि यह कैसे काम करता है तब तक यह महत्वपूर्ण नहीं है।

मैं विंडोज सीएमडी कंसोल में दो कमांड चलाने के लिए चाहता हूं।

लिनक्स में मैं ऐसा करूँगा: इस touch thisfile ; ls -lstrh touch thisfile ; ls -lstrh

विंडोज़ पर यह कैसे किया जाता है?


cmd /c ipconfig /all & Output.txt

यह आदेश एक कमांड में कमांड निष्पादित Output.txt और Output.txt फ़ाइल खोलें


मैं एक ही खिड़की में दो पिंग्स रखने की कोशिश करता हूं, और यह एक ही पंक्ति पर एक सीरियल कमांड है। पहले खत्म करने के बाद, दूसरा आदेश चलाएं।

समाधान विंडोज 7 कमांड प्रॉम्प्ट पर start /b साथ गठबंधन करना था।

सामान्य रूप से शुरू करें, बिना /b , और एक अलग विंडो में लॉन्च करें।

एक ही पंक्ति में लॉन्च करने के लिए प्रयुक्त कमांड है:

start /b command1 parameters & command2 parameters

किसी भी तरह, यदि आप आउटपुट को पार्स करना चाहते हैं, तो मैं इसका उपयोग करने की अनुशंसा नहीं करता हूं। मैंने देखा कि आउटपुट कमांड के आउटपुट के बीच scrambled है।


तो, मैं एक संदर्भ मेनू से RegAsm (रजिस्टर असेंबली) चलाने के विशिष्ट कार्य को सक्षम करने की कोशिश कर रहा था। मेरे पास यह मुद्दा था कि परिणाम चमक जाएगा और इससे पहले कि मैं इसे पढ़ सकूं। तो मैंने रोकने के लिए पाइपिंग करने की कोशिश की, जो कमांड विफल होने पर काम नहीं करता है (जैसा कि यहां बताया गया है रोकें कमांड .bat स्क्रिप्ट में काम नहीं कर रहा है और यहां बैच फ़ाइल कमांड PAUSE काम नहीं करता है )। तो मैंने cmd /k की कोशिश की लेकिन यह अधिक कमांड के लिए विंडो खोलता है (मैं सिर्फ परिणाम पढ़ना चाहता हूं)। तो मैंने चेन से exit बाद एक pause जोड़ा, जिसके परिणामस्वरूप निम्नलिखित में शामिल किया गया:

cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit

यह एक आकर्षण की तरह काम करता है - RegAsm फ़ाइल पर चलता है और इसके परिणाम दिखाता है, फिर "जारी रखने के लिए कोई भी कुंजी दबाएं ..." प्रॉम्प्ट दिखाया जाता है, तो कमांड प्रॉम्प्ट विंडो बंद होने पर बंद हो जाती है।

पीएस उन लोगों के लिए जो रुचि रखते हैं, आप .dll फ़ाइलों में एक dllfile एसोसिएशन जोड़ने के लिए निम्न .reg फ़ाइल प्रविष्टियों का उपयोग कर सकते हैं और उसके बाद एक RegAsm कमांड एक्सटेंशन (बच निकले उद्धरण और बैकस्लाश देखें):

[HKEY_CLASSES_ROOT\.dll]
"Content Type"="application/x-msdownload"
@="dllfile"

[HKEY_CLASSES_ROOT\dllfile]
@="Application Extension"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]
@="Register Assembly"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]
@="cmd /k C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"

असेंबली पंजीकृत करने के लिए अब मेरे पास एक अच्छा राइट-क्लिक मेनू है।


आप पर्यावरण चर के बहुत जल्द मूल्यांकन की समस्या को दूर करने के लिए कॉल का उपयोग कर सकते हैं - उदाहरण के लिए

set A=Hello & call echo %A%

आप एक के बाद एक आदेश का उपयोग और चलाने के लिए कर सकते हैं। उदाहरण: c:\dir & vim myFile.txt


दस्तावेज से एक उद्धरण:

एकाधिक कमांड और सशर्त प्रसंस्करण प्रतीकों का उपयोग करना

आप सशर्त प्रोसेसिंग प्रतीकों का उपयोग कर एकल कमांड लाइन या स्क्रिप्ट से एकाधिक कमांड चला सकते हैं। जब आप सशर्त प्रसंस्करण प्रतीकों के साथ एकाधिक आदेश चलाते हैं, तो सशर्त प्रसंस्करण प्रतीक के बाईं ओर कमांड के परिणामों के आधार पर सशर्त प्रसंस्करण प्रतीक अधिनियम के दाईं ओर दिए गए आदेश।

उदाहरण के लिए, यदि आप पिछला कमांड विफल रहता है तो आप केवल एक आदेश चला सकते हैं। या, यदि आप पिछला कमांड सफल होते हैं तो आप केवल एक आदेश चला सकते हैं।

आप एकाधिक कमांड पास करने के लिए निम्न तालिका में सूचीबद्ध विशेष वर्णों का उपयोग कर सकते हैं।

  • & [...]
    command1 & command2
    एक कमांड लाइन पर एकाधिक कमांड को अलग करने के लिए प्रयोग करें। Cmd.exe पहला आदेश चलाता है, और फिर दूसरा आदेश चलाता है।

  • && [...]
    command1 && command2
    कमांड को चलाने के बाद कमांड को चलाने के लिए उपयोग करें और केवल तभी जब प्रतीक से पहले कमांड सफल होता है। Cmd.exe पहला आदेश चलाता है, और उसके बाद केवल दूसरा आदेश चलाता है यदि पहला आदेश सफलतापूर्वक पूरा हो जाता है।

  • || [...]
    command1 || command2
    निम्नलिखित आदेश चलाने के लिए प्रयोग करें || केवल अगर आदेश से पहले || विफल रहता है। Cmd.exe पहला कमांड चलाता है, और फिर दूसरा आदेश केवल तभी चलाता है जब पहला आदेश सफलतापूर्वक पूरा नहीं हुआ (शून्य से अधिक त्रुटि कोड प्राप्त करता है)।

  • ( ) [...]
    (command1 & command2)
    समूह या घोंसला एकाधिक आदेशों के लिए उपयोग करें।

  • ; or ,
    command1 parameter1;parameter2
    कमांड पैरामीटर अलग करने के लिए प्रयोग करें।


& बैश के बराबर है ; (रन कमांड) और && बैश समकक्ष && (केवल रन कमांड है जब पिछली बार त्रुटि नहीं हुई है)।


जब आप एक पंक्ति में चर का उपयोग या कुशलतापूर्वक उपयोग करने का प्रयास करते हैं तो उनकी सामग्री से सावधान रहें! निम्न की तरह एक चर जैसे

PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

यदि आप इसे %PATH% रूप में उपयोग करते हैं तो बहुत सारी असुरक्षित परेशानी हो सकती है

  1. समापन कोष्ठक आपके समूह विवरण को समाप्त कर देते हैं
  2. डबल कोट्स आपको कोष्ठक समस्या को संभालने के लिए %PATH% का उपयोग करने की अनुमति नहीं देते हैं
  3. और %USERPROFILE% जैसे संदर्भित चर क्या होगा?

यह आसान है: बस उन्हें & चिन्हों से अलग करें। उदाहरण:

echo Hello World && echo GoodBye World

हैलो वर्ल्ड के बाद अलविदा दुनिया मुद्रित की जाएगी।


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

@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!

0 1

जैसा कि आप उपर्युक्त उदाहरण में देखते हैं, जब चर का उपयोग करने वाले कमांड एक ही पंक्ति पर रखे जाते हैं, तो आपको अपने परिवर्तनीय मानों को अपडेट करने के लिए देरी से विस्तार का उपयोग करना होगा। यदि आपका चर अनुक्रमित है, तो उसी पंक्ति पर अपना मान अपडेट करने के लिए %% संशोधक के साथ कॉल कमांड का उपयोग करें:

set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%

path5=C:\Users\UserName\AppData\Local\Temp\MyFile5

एक ही समय में दो कमांड निष्पादित करने के लिए, आपको दो आदेशों के बीच एक & (ampersand) प्रतीक रखना होगा। इस तरह:

color 0a & start chrome.exe

चीयर्स!


2000 के बाद से यह सभी माइक्रोसॉफ्ट ओएस पर, और आज भी अच्छा है:

dir & echo foo

यदि आप दूसरे आदेश को निष्पादित करना चाहते हैं तो केवल पहले सफलतापूर्वक बाहर निकलें:

dir && echo foo

एक लाइन पर एकाधिक कमांड निष्पादित करने के लिए सिंगल एम्पर्सेंड (&) वाक्यविन्यास विंडोज एक्सपी, विंडोज 2000, और कुछ पुराने एनटी संस्करणों पर वापस चला जाता है। (4.0 कम से कम, यहां एक टिप्पणीकर्ता के अनुसार।)

इसके बारे में कुछ और मुद्दे हैं जो आपको इस पृष्ठ पर स्क्रॉलिंग मिलेंगे।

ऐतिहासिक डेटा निम्नानुसार है, जो इसे शैक्षिक पाते हैं।

इससे पहले, & quot; सिंटैक्स केवल माइक्रोसॉफ्ट कमांड दुभाषिया में जोड़ा गया था इससे पहले कि & quot वाक्य शेल प्रतिस्थापन 4DOS की एक विशेषता थी।

विंडोज 95, 98 और एमई में, आप इसके बजाय पाइप चरित्र का उपयोग करेंगे:

dir | echo foo

एमएस-डॉस 5.0 और बाद में, कमांड दुभाषिया के कुछ पूर्व विंडोज और एनटी संस्करणों के माध्यम से, (अनियंत्रित) कमांड विभाजक चरित्र 20 (Ctrl + T) था जिसे मैं यहां ^ टी के साथ प्रस्तुत करूंगा।

dir ^T echo foo




cmd