2012-11-10 26 views
21

का उपयोग करके बैच स्क्रिप्ट को कैसे चलाएं, क्या विंडो में कोई तरीका है जिसके माध्यम से हम * .bat एक्सटेंशन के बिना बैच स्क्रिप्ट निष्पादित कर सकते हैं?* .bat एक्सटेंशन

+4

ठीक है, आप इसे एक '.cmd' फाइल करने के लिए नाम बदलने सकता है ... –

+3

विंडोज़ को यह जानने के लिए स्क्रिप्ट में एक एक्सटेंशन (या तो बीएटी या सीएमडी) होना चाहिए, यह एक बैच स्क्रिप्ट है। मुझे नहीं लगता कि आपके स्वयं के एक्सटेंशन को परिभाषित करना संभव है जो बैच फ़ाइल के बराबर है, न ही विंडोज़ को फ्लाई पर बैच स्क्रिप्ट के रूप में किसी भी फ़ाइल का उपयोग करने के लिए निर्देश देना संभव है। – dbenham

+0

@ डेबेनहम नो ब्रो, मैंने परीक्षण नहीं किया है, मैं अपने फोन के माध्यम से जवाब दे रहा हूं। लेकिन मेरा मानना ​​है कि मैंने पहले देखा है। बैच एक्सटेंशन पहले। लेकिन मैं googled और पाया कि मैं गलत हूँ। मुझे सही करने के लिए धन्यवाद। –

उत्तर

11

यह मेरे लिए एक दिलचस्प विषय है! मैं इसके बारे में कुछ अवलोकन करना चाहता हूं।

महत्वपूर्ण बिंदु पहले: ए बैच फ़ाइल एक फ़ाइल है जिसमें बीएटी या सीएमडी एक्सटेंशन है। अवधि। बैच फ़ाइलें, प्राप्त कर सकते हैं के अलावा सामान्य डॉस के निष्पादन के आदेश, कुछ विशिष्ट बैच फ़ाइल सुविधाओं, विशेष रूप से:

  • % के माध्यम से बैच फ़ाइल मानकों तक पहुंच 1% से 2 ... और शिफ्ट आदेश के निष्पादन।
  • GOTO कमांड का निष्पादन।
  • कॉल का निष्पादन: NAME कमांड (आंतरिक सबराउटिन)।
  • सेटलोकल/एंडलोकल आदेशों का निष्पादन।

अब मजाकिया हिस्सा: किसी भी फ़ाइल को CMD.exe के इनपुट के रूप में रीडायरेक्ट किया जा सकता है, इसलिए इसमें शामिल डॉस कमांड बैच फ़ाइल के समान तरीके से निष्पादित किए जाते हैं, कुछ मतभेदों के साथ। सबसे महत्वपूर्ण बात यह है कि पिछली बैच-फ़ाइल सुविधाएं काम नहीं करेगी। एक और अंतर नीचे नहीं-बैच फ़ाइल दर्शाए गए हैं (मैं इसे BATCH.TXT कहा जाता है): अध्यक्ष एवं प्रबंध निदेशक/वी:

@echo off 
rem Echo off just suppress echoing of the prompt and each loop of FOR command 
rem but it does NOT suppress the listing of these commands! 

rem Pause command does NOT pause, because it takes the character that follows it 
pause 
X 

rem This behavior allows to put data for a SET /P command after it 
set /P var=Enter data: 
This is the data for previous command! 
echo Data read: "%var%" 

rem Complex FOR/IF commands may be assembled and they execute in the usual way: 
for /L %i in (1,1,5) do (
    set /P line= 
    if "!line:~0,6!" equ "SHOW: " echo Line read: !line:~6! 
) 
NOSHOW: First line read 
SHOW: Second line 
NOSHOW: This is third line 
SHOW: The line number 4 
NOSHOW: Final line, number five 

rem You may suppress the tracing of the execution redirecting CMD output to NUL 
rem In this case, redirect output to STDERR to display messages in the screen 
echo This is a message redirected to STDERR >&2 

rem GOTO command doesn't work: 
goto label 
goto :EOF 
rem but both EXIT and EXIT /B commands works: 
exit /B 

:label 
echo Never reach this point... 

पिछले फ़ाइल, प्रकार पर अमल करने के लिए पर < BATCH.TXT /वी स्विच की जरूरत है देरी विस्तार को सक्षम करने के लिए।

अधिक विशेष मतभेद इस तथ्य से संबंधित हैं कि नोट-बैच फ़ाइल में आदेश कमांड लाइन संदर्भ में निष्पादित किए गए हैं, बैच-फ़ाइल संदर्भ नहीं। शायद डेव या जेब इस बिंदु पर विस्तार कर सकते हैं।

संपादित करें:अतिरिक्त टिप्पणियों (batch2.txt): अध्यक्ष एवं प्रबंध निदेशक < BATCH2.TXT> NUL

संपादित: अधिक अतिरिक्त टिप्पणियों

@echo off 
rem You may force SET /P command to read the line from keyboard instead of 
rem from following lines by redirecting its input to CON device. 

rem You may also use CON device to force commands output to console (screen), 
rem this is easier to write and read than >&2 

echo Standard input/output operations> CON 
echo/> CON 
< CON set /P var=Enter value: > CON 
echo/> CON 
echo The value read is: "%var%"> CON 

इस तरह से पिछले फ़ाइल निष्पादित (बैच 3.txt)

@echo off 

rem Dynamic access to variables that usually requires DelayedExpansion via "call" trick 

rem Read the next four lines; "next" means placed after the FOR command 
rem (this may be used to simulate a Unix "here doc") 

for /L %i in (1,1,4) do (
    set /P line[%i]= 
) 
Line one of immediate data 
This is second line 
The third one 
And the fourth and last one... 

(
echo Show the elements of the array read: 
echo/ 
for /L %i in (1,1,4) do call echo Line %i- %line[%i]% 
) > CON 
अध्यक्ष एवं प्रबंध निदेशक < BATCH3.TXT> NUL

दिलचस्प:

हमेशा की तरह इस फाइल को निष्पादित! यही है ना

EDIT: अब, GOTO और कॉल कमांड को NotBatch.txt फ़ाइल में अनुकरण किया जा सकता है !!! this post देखें।

एंटोनियो

0

यह हाँ संभव हो सकता है, लेकिन शायद और न ही एक आसान तरीका में =) सभी .. सुरक्षा के पहले होता है। मैं कुछ साल पहले एक ही चीज़ करने की कोशिश करता हूं, और कुछ महीने पहले, लेकिन मुझे इसके बारे में कोई समाधान नहीं मिला ..आप

execu.cmd

type toLaunch.txt >> bin.cmd 
call bin.cmd 
pause > nul 
exit 

तो toLaunch.txt में डाल

@echo off 
echo Hello! 
pause > nul 
exit 

सिर्फ उदाहरण के रूप में करने की कोशिश कर सकता है, यह "संकलन" कोड होगा, तो यह निष्पादित करेंगे " आउटपुट "फ़ाइल, यह सिर्फ" पार्स "

पार्स किए जाने के बजाय आप केवल नाम का नाम बदल सकते हैं और हो सकता है कि अंदर से launch.txt

का उपयोग कर स्क्रिप्ट के अंदर एक ऑटो नाम बदलें
ren %0 %0.txt 

आशा है कि इससे मदद मिलेगी!

0

मेरे मामले में, खिड़कियों को बिना विस्तार के फ़ाइलों को चलाने के लिए (केवल * .cmd, * .exe के लिए) को देखने के लिए, मैंने pathext चर (सिस्टम varailbles में) को .cmd शामिल करने के लिए याद किया है। एक बार जोड़ा गया है कि फ़ाइल फ़ाइल से फ़ाइल.cmd चलाने के लिए मेरे पास और नहीं है।

वातावरण चर -> .cmd शामिल करने के लिए जोड़ सकते हैं/प्रणाली चर संपादित; .exe (बिल्कुल अपनी फ़ाइल पथ में होना चाहिए)