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


958

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

लिनक्स में मैं इसे इस तरह से करूँगा

touch thisfile ; ls -lstrh

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

जवाबों:


1317

2000 के बाद से सभी Microsoft OS पर यह पसंद है, और आज भी अच्छा है:

dir & echo foo

यदि आप चाहते हैं कि दूसरा कमांड केवल तभी निष्पादित हो, जब पहला सफलतापूर्वक समाप्त हो जाए:

dir && echo foo

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

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

ऐतिहासिक डेटा का अनुसरण उन लोगों के लिए किया जाता है, जो इसे शैक्षिक मान सकते हैं।

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

Windows 95, 98 और ME में, आप इसके बजाय पाइप वर्ण का उपयोग करेंगे:

dir | echo foo

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

dir ^T echo foo

26
कम से कम नीचे NT 4.
जॉय

17
विन 8.0 और 8.1 पर भी काम करता है।
मेमोरियल

5
@Fallenreaper, जो सीधे cmdप्रॉम्प्ट में भी काम करता है , इसलिए मुझे लगता है कि यह एक बुरी आदत नहीं है। :)

6
@Fallenreaper सुनिश्चित करें कि आप दोनों के बीच के व्यावहारिक अंतर से अवगत हैं: नीचे रहान का उत्तर देखें।
मोशे काटज़

8
आपकी बात समझ में आ गई। A && B, B केवल तभी चलेगा जब A सफल होगा, जबकि A और B A के बाद B चलाएगा, कोई फर्क नहीं पड़ता कि A का परिणाम क्या है। सिर के लिए धन्यवाद
पतन 44

578

प्रलेखन से एक उद्धरण:

कई आदेशों और सशर्त प्रसंस्करण प्रतीकों का उपयोग करना

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

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

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

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

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

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

  • ( ) [...]
    (command1 & command2)
    कई कमांड्स को ग्रुप या नेस्ट करने के लिए उपयोग करें।

  • ; or ,
    command1 parameter1;parameter2
    अलग-अलग कमांड मापदंडों का उपयोग करें।


41
कोशिश करो cmd /c "echo foo & echo bar"
रेहान

2
vagrant up && vagrant sshविंडोज 10 पर उद्धरण चिह्नों के बिना काम किया
फरमान87

धन्यवाद! मुझे सिंगे के बारे में पता नहीं था &- यह अतुल्यकालिक बनाता है और दोनों को समानांतर में चलाता है। मैं अटक गया था क्योंकि मैं के &&साथ प्रयोग कर रहा था तुल्यकालिक है और केवल तभी जारी रहता है जब पहला सफल होता है!
टेट्रादेव

1
प्रलेखन लिंक टूटी हुई है, नए स्थान technet.microsoft.com/en-us/library/bb490954.aspx
nkef

7
@TetraDev &आदेशों को अतुल्यकालिक या समानांतर नहीं बनाता है। पूरा होने के बादcommand1 & command2 चलेगा । सफलता या असफलता अप्रासंगिक है। command2 command1command1
जन्मफोरनेग सेप

74

&के लिए बैश बराबर है ;(चलाने के आदेशों) और &&की बैश बराबर है &&(चलाने के आदेशों केवल जब पिछले एक त्रुटि की वजह से नहीं किया गया है)।


1
यह csh, tsh और कई और गोले के लिए भी सही है। मैंने पहले कभी ;लिनक्स में नहीं देखा है
phuclv

10
@ LưuV LnhPhúc शैली के गोले में, ;पहली कमांड को चलाने का मतलब है, इसके खत्म होने का इंतजार करें, फिर दूसरी कमांड को चलाएं। &पहला कमांड चलाने का मतलब है, इसे बैकग्राउंड में रखना, और दूसरा कमांड चलाना। इसलिए दोनों कार्यक्रम एक साथ शुरू होते हैं। ध्यान दें कि ये प्रतीकों का संयोजन नहीं कर रहे हैं, वे पहले आदेश पर प्रतीकों को पीछे छोड़ रहे हैं; आप progname &दूसरी कमांड के बिना बैकग्राउंड में सिंगल कमांड लॉन्च कर सकते हैं ।
MM

25

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


19

यदि आप एक cmd शॉर्टकट बनाना चाहते हैं (उदाहरण के लिए अपने डेस्कटॉप पर) तो / k पैरामीटर (/ k का अर्थ है, / c) विंडो को जोड़ेगा:

cmd /k echo hello && cd c:\ && cd Windows

16

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

set A=Hello & call echo %A%

1
यह केवल तभी काम करता है जब चर पहले से सेट नहीं होता है, जिस स्थिति echoमें पुराने मूल्य को प्रिंट करता है , नए मूल्य को नहीं। कम से कम, यह वही है जो मैं अपने विंडोज 7 बॉक्स पर देखता हूं।
क्रेग एम। ब्रैंडेनबर्ग

मैं सेट ए का उपयोग करता हूं = पहले यह सुनिश्चित करने के लिए कि चर सेट नहीं है।
एसएसआई

1
एक बेहतर तरीका विलंबित विस्तार ( setlocal EnableDelayedExpansionएक स्क्रिप्ट या में cmd /v) का उपयोग करना है। उदाहरण के लिए timeout 5 && cmd /v /c echo !TIME! && echo %TIME%:।
निक

5
नए मूल्य प्राप्त करने के लिए पहले प्रतिशत के बाद ^ का उपयोग करें: A = Hello और कॉल echo% ^ A%
निकोलस

9

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

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

0 1

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

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

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

दिए गए उदाहरण ने मेरे लिए काम नहीं किया लेकिन एक ने नीचे काम किया:cmd /V:ON /c "set i=5 & set arg!i!=MyFile!i! & echo path!i!=%temp%\%arg!i!%"
sactiw

8

cmd /c ipconfig /all & Output.txt

यह कमांड Output.txtएक ही कमांड में कमांड और ओपन फाइल को निष्पादित करता है


8

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

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

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

PS उन अन्य लोगों के लिए जो रूचि ले सकते हैं, आप एक। Dllfile एसोसिएशन को .dll फ़ाइलों में जोड़ने के लिए निम्नलिखित .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"

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



4

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

color 0a & start chrome.exe

चीयर्स!


4

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

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

हमेशा की तरह, बिना /b, और एक अलग विंडो में लॉन्च करें।

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

start /b command1 parameters & command2 parameters

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


4

ठीक है, आपके पास दो विकल्प हैं: पाइपिंग, या बस &:

DIR /S & START FILE.TXT

या,

tasklist | find "notepad.exe"

पाइपिंग ( |) एक कमांड के आउटपुट को लेने और दूसरे में डालने के लिए अधिक है। और ( &) कह रहा है कि यह चलाओ, और वह।


क्या आप अपने पोस्ट को कुछ स्पष्टीकरण शामिल करने के लिए संपादित कर सकते हैं कि क्या &और क्या होता है और |वे कैसे भिन्न होते हैं, यदि बिल्कुल? अभी इन अवधारणाओं से अपरिचित लोग अपने लिए तय नहीं कर पा रहे हैं कि उनके मामलों में किसका इस्तेमाल किया जाए।
Mirek Długosz

जैसे मैं था। मेरी गलती। मैं पोस्ट को तुरंत संपादित करूंगा। इसकी प्रशंसा करना।
PyDever

"ढूंढना" के बजाय "ढूंढना" होना चाहिए
अनु शिबिन जोसेफ राज

2

नहीं, नहीं cd / && tree && echo %time%। वह समय गूँज रहा है जब पहली कमांड निष्पादित की गई है।

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


1

एक और उदाहरण: उदाहरण के लिए, जब हम gulpइसके बजाय बिल्ड सिस्टम का उपयोग करते हैं

gulp - डिफ़ॉल्ट> बिल्ड

gulp build - बिल्ड-फोल्डर बनाएं

gulp watch - फाइल-वॉच शुरू करें

gulp dist - dist-folder का निर्माण करें

हम एक लाइन के साथ ऐसा कर सकते हैं:

cd c:\xampp\htdocs\project & gulp & gulp watch

1

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

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

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

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

2
विंडोज सीएमडी में एक लाइन में दो कमांड चलाने के साथ इसका क्या करना है?
पीटर मोर्टेंसन

0

हाँ वहाँ है। यह है &

&& कमांड 2 को तब निष्पादित करेगा जब कमांड 1 पूरा हो गया है बशर्ते वह विफल न हो।

& परवाह किए बिना अमल करेंगे।


0

&एक पंक्ति में कमांड का उपयोग करने के लिए खिड़कियों में प्रतीक का उपयोग करें

C:\Users\Arshdeep Singh>cd Desktop\PROJECTS\PYTHON\programiz & jupyter notebook

जैसे लिनक्स में हम उपयोग करते हैं,

touch thisfile ; ls -lstrh

-2

यह सरल है: बस उन्हें &&संकेतों के साथ अंतर करें । उदाहरण:

echo "Hello World" && echo "GoodBye World".

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


6
इस तथ्य से स्वतंत्र, कि पहले से ही पुराने उत्तर हैं जो समान दिखाता है, यह अभी भी काफी सही नहीं है। &&एक सशर्त ऑपरेटर है, अगली कमांड केवल तभी निष्पादित की जाती है जब पहली कमांड सुसाइड की जाती है (एररवेल = 0)
jeb

बेशक। यह स्वयं स्पष्ट है अगर व्यक्ति दो आज्ञाओं को चलाना चाहता है तो वे दोनों सही होंगे और इस तरह सब कुछ अच्छा होगा
राजन धनोवा

1
राजन: उसका मतलब है "यदि पहली कमांड सफल हो जाती है तो अगली कमांड को केवल निष्पादित किया जाता है"।
इवान

2
" हेलो वर्ल्ड के बाद गुडबाय वर्ल्ड प्रिंट होगा " बशर्ते प्रिंटिंग Hello Worldफेल न हो। जैसा @ ज़ेब ने कहा है, &&सशर्त है। &यदि पिछला सफल था या नहीं, तो इसकी परवाह किए बिना कमांड चलाता है।
प्रणव ए।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.