विंडोज बैच फ़ाइल में एक लाइन पर कई कमांड


111

यूनिक्स में, हम इस तरह से एक ही पंक्ति में कई कमांड रख सकते हैं:

$ date ; ls -l ; date

मैंने विंडोज में इसी तरह की कोशिश की:

 > echo %TIME% ; dir ; echo %TIME

लेकिन यह समय मुद्रित करता है और कमांड निष्पादित नहीं करता है dir

इसे कैसे प्राप्त किया जा सकता है?


जवाबों:


181

उपयोग:

echo %time% & dir & echo %time%

यह स्मृति से, अर्ध-बृहदान्त्र विभाजक में bashऔर अन्य UNIXy गोले के बराबर है।

वहाँ भी है &&(या ||) जो केवल दूसरी कमांड निष्पादित करता है यदि पहली सफल (या विफल) हुई है, लेकिन एकल एम्परसेंड &वही है जो आप यहां खोज रहे हैं।


हालांकि आपको वैसा ही समय देने की संभावना है, क्योंकि पर्यावरण चर का निष्पादन करने के बजाय पढ़ने पर मूल्यांकन किया जाता है।

आप विलंबित विस्तार को चालू करके इसे प्राप्त कर सकते हैं:

pax> cmd /v:on /c "echo !time! & ping 127.0.0.1 >nul: & echo !time!"
15:23:36.77
15:23:39.85

कमांड लाइन से इसकी जरूरत है। यदि आप इसे किसी स्क्रिप्ट के अंदर कर रहे हैं, तो आप इसका उपयोग कर सकते हैं setlocal:

@setlocal enableextensions enabledelayedexpansion
@echo off
echo !time! & ping 127.0.0.1 >nul: & echo !time!
endlocal

जवाब के लिए धन्यवाद। मुद्दा यह आंशिक रूप से काम करता है। पहला और अंतिम%%% एक ही समय प्रिंट करता है, जब भी कमांड (बीच में) पूरा होने में कम से कम 40 सेकंड लेता है। (मैं dir कमांड के बजाय अपनी स्क्रिप्ट चलाता हूं)
रघुराम

1
ऐसा इसलिए है क्योंकि वातावरण चर मूल्यांकन किया जाता है जब आदेश है पढ़ बजाय मार डाला। मैं जवाब अपडेट कर दूंगा।
paxdiablo

फिर भी यह मुद्दा कायम है। स्क्रिप्ट कोड 1 के साथ बाहर हो रही है। लेकिन अभी भी दूसरी प्रतिध्वनि उसी समय प्रिंट करती है इस ऑप को देखें 12: 57: 56.93 एक धागा बाहर निकलता है जबकि 3 धागे चल रहे थे। 12: 57: 56.93
रघुराम

3
मैंने इस मुद्दे को दरकिनार करने के बजाय time /t(या echo.|time) का उपयोग करने का प्रयास किया echo %time%
जोए

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