मैं एक बैच फ़ाइल में कई आदेशों पर लंबी कमांड कैसे विभाजित कर सकता हूं?
मैं एक बैच फ़ाइल में कई आदेशों पर लंबी कमांड कैसे विभाजित कर सकता हूं?
जवाबों:
आप कैरेट के साथ लंबी लाइनों को तोड़ सकते हैं ^
जब तक आपको याद है कि कैरेट और उसके बाद की नई लाइन पूरी तरह से हटा दी जाती है। इसलिए, यदि कोई स्थान होना चाहिए जहां आप लाइन को तोड़ रहे हैं, तो एक स्थान शामिल करें। ( नीचे उस पर और अधिक )
उदाहरण:
copy file1.txt file2.txt
के रूप में लिखा जाएगा:
copy file1.txt^
file2.txt
echo
एड हो तो कुल २ लाइन-फीड्स बना सकते हैं ।
co^␍py ^␍file1 ^␍file2
। मैं तुम्हें बचने के भ्रम को अपनी टिप्पणी को हटाने के सुझाव देते हैं, विशेष रूप से के रूप में इस तरह के एक questyion लोकप्रिय एक है
देखभाल के लिए नियम है:
लाइन के अंत में एक कैरेट, अगली पंक्ति को जोड़ देता है, एपेंडेड लाइन का पहला चरित्र बच जाएगा।
आप कई बार कार्यवाहक का उपयोग कर सकते हैं, लेकिन पूर्ण पंक्ति ~ 8192 वर्ण (Windows XP, Windows Vista और Windows 7) की अधिकतम पंक्ति लंबाई से अधिक नहीं होनी चाहिए।
echo Test1
echo one ^
two ^
three ^
four^
*
--- Output ---
Test1
one two three four*
echo Test2
echo one & echo two
--- Output ---
Test2
one
two
echo Test3
echo one & ^
echo two
--- Output ---
Test3
one
two
echo Test4
echo one ^
& echo two
--- Output ---
Test4
one & echo two
अगले चरित्र के भागने को दबाने के लिए आप एक पुनर्निर्देशन का उपयोग कर सकते हैं।
पुनर्निर्देशन कार्यवाहक से ठीक पहले होना चाहिए। लेकिन कैरेट से पहले पुनर्निर्देशन के साथ एक जिज्ञासा मौजूद है।
यदि आप कैरेट पर टोकन रखते हैं तो टोकन हटा दिया जाता है।
echo Test5
echo one <nul ^
& echo two
--- Output ---
Test5
one
two
echo Test6
echo one <nul ThisTokenIsLost^
& echo two
--- Output ---
Test6
one
two
और लाइन फीड को स्ट्रिंग में एम्बेड करना भी संभव है :
setlocal EnableDelayedExpansion
set text=This creates ^
a line feed
echo Test7: %text%
echo Test8: !text!
--- Output ---
Test7: This creates
Test8: This creates
a line feed
खाली लाइन सफलता के लिए महत्वपूर्ण है। यह केवल विलंबित विस्तार के साथ काम करता है, अन्यथा लाइन फीड के बाद बाकी लाइन को नजरअंदाज कर दिया जाता है।
यह काम करता है, क्योंकि लाइन के अंत में कैरेट अगली पंक्ति के फ़ीड को अनदेखा कर देता है और अगले चरित्र से बच जाता है, भले ही अगला चरित्र भी एक लाइन फीड हो (इस चरण में गाड़ी के रिटर्न को हमेशा अनदेखा किया जाता है)।
copy ^[newline]"file1.txt" ^[newline]"file2.txt"
काम नहीं करता है! मुझे एक स्थान जोड़ना था copy ^[newline] "file1.txt" ^[newline] "file2.txt"
:।
(यह मूल रूप से वेन के उत्तर का पुनर्लेखन है, लेकिन कैरट के चारों ओर भ्रम की स्थिति साफ हो गई है। इसलिए मैंने इसे एक CW के रूप में पोस्ट किया है। मैं उत्तरों के बारे में शर्मिंदा नहीं हूं, लेकिन पूरी तरह से उन्हें फिर से लिखना अनुचित लगता है।)
आप कैरट ( ^
) के साथ लंबी लाइनें तोड़ सकते हैं , बस याद रखें कि कैरेट और उसके बाद आने वाली नई लाइन पूरी तरह से कमांड से हटा दी जाती है , इसलिए यदि आप इसे डालते हैं जहां एक स्थान की आवश्यकता होगी (जैसे मापदंडों के बीच), सुनिश्चित करें स्थान को भी शामिल करने के लिए (या तो पहले ^
, या अगली पंक्ति की शुरुआत में - वह बाद वाला विकल्प यह स्पष्ट करने में मदद कर सकता है कि यह एक निरंतरता है)।
उदाहरण: (सभी विंडोज़ एक्सपी और विंडोज 7 पर परीक्षण किए गए)
xcopy file1.txt file2.txt
के रूप में लिखा जा सकता है:
xcopy^
file1.txt^
file2.txt
या
xcopy ^
file1.txt ^
file2.txt
या और भी
xc^
opy ^
file1.txt ^
file2.txt
(पिछले काम करता है ऐसा इसलिए है क्योंकि betwen कोई रिक्त स्थान नहीं है xc
और ^
, और अगली पंक्ति की शुरुआत में कोई रिक्त स्थान। तो जब आप को दूर ^
और न्यू लाइन, आप मिलता है ... xcopy
।)
पठनीयता और पवित्रता के लिए, यह संभवतः केवल मापदंडों के बीच सबसे अच्छा ब्रेकिंग है (अंतरिक्ष को शामिल करना सुनिश्चित करें)।
सुनिश्चित करें कि हो सकता है ^
है नहीं एक बैच फ़ाइल में आखिरी बात, वहाँ के रूप में उस के साथ एक प्रमुख मुद्दा हो गया लगता है ।
कई आदेशों को कोष्ठक में रखा जा सकता है और कई लाइनों में फैल सकता है; तो कुछ echo hi && echo hello
इस तरह से रखा जा सकता है:
( echo hi
echo hello )
इसके अलावा चर मदद कर सकते हैं:
set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE"
if exist %AFILEPATH% (
start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING...
) else (
...
इसके अलावा, मैंने कैरेट्स ( ^
) के साथ देखा कि if
सशर्त उन्हें पसंद करने के लिए केवल एक स्थान मौजूद था:
if exist ^
cmd1.bat && cmd2.bat
पैरेंस फॉर्म से अलग है: cmd2.bat
iff cmd1.bat
को सफलतापूर्वक निष्पादित किया गया है (-थाउट सेटिंग %errorcode%
)। उत्तरार्द्ध रूप बिना शर्त निष्पादित करता है। कुछ अप्रत्याशित (मेरे लिए कम से कम) यह है कि, जाहिर है, आप दोनों के संयोजन का उपयोग नहीं कर सकते हैं + यानी &&
लाइन ब्रेक से पहले जोड़ें ।
( echo <line break here> hello )
एक खाली लाइन में परिणाम।
हालांकि यह लगता है कि पाश एक कैरट की जरूरत नहीं है के लिए एक के मूल्यों के बीच में बंटवारे (और वास्तव में एक सिंटैक्स त्रुटि पर विचार किया जाएगा उपयोग करने के लिए कोशिश कर रहा है)। उदाहरण के लिए,
for %n in (hello
bye) do echo %n
ध्यान दें कि नमस्ते के बाद या अलविदा से पहले किसी भी स्थान की आवश्यकता नहीं है।
for
वाक्य रचना का हिस्सा है : "फॉर-सेट" में तत्वों के विभाजक स्थान, अल्पविराम, अर्धविराम, समान-चिह्न, TAB चरित्र और नई-लाइनें हैं।
do
भाग में कई / नेस्टेड if-else
स्टेटमेंट हों?
^
अपने आदेश पाठ के ठीक पहले और बाद में कोई स्थान जोड़ते हैं, तो आप बिना स्थान के अगली पंक्ति शुरू कर सकते हैं ।