2012-01-31 10 views
29

लोग लंबे समय तक बैच फ़ाइलों के भीतर वीबीस्क्रिप्ट को एम्बेड और निष्पादित कर रहे हैं। लेकिन सभी प्रकाशित समाधान जिन्हें मैंने देखा है (उस समय जब यह प्रश्न मूल रूप से सामने आया था) में एक अस्थायी वीबीएस फ़ाइल लिखना शामिल है। उदाहरण के लिए: Embed VBScript inside Windows batch fileक्या अस्थायी फ़ाइल का उपयोग किए बिना बैच फ़ाइल में VBScript को एम्बेड और निष्पादित करना संभव है?

क्या अस्थायी फ़ाइल लिखने के बिना बैच के भीतर एम्बेडेड वीबीस्क्रिप्ट निष्पादित करना संभव है?

उत्तर

39

नोट - सबसे अच्छा समाधान के लिए इस उत्तर के तल परअद्यतन 2014-04-27अनुभाग के लिए कूद।

मुझे लगता था कि जवाब नहीं था। लेकिन फिर डॉसटिप्स उपयोगकर्ता लिविउ ने पाया कि <SUB> वर्ण (Ctrl-Z, 0x1A, दशमलव 26) में बैच फ़ाइल के भीतर एम्बेडेड होने पर विचित्र प्रभाव पड़ता है। यदि कुछ हद तक एक लाइन टर्मिनेटर की तरह कार्य करता है जैसे बैच कमांड के लिए यह संभव है जो आरईएम (या एक :: टिप्पणी हैक) का पालन करें तो निष्पादित करने के लिए यदि वे Ctrl-Z से पहले हैं। http://www.dostips.com/forum/viewtopic.php?p=13160#p13160

यह एक्सपी होम संस्करण एसपी 3, विस्टा होम प्रीमियम एसपी 2 64 बिट, और विस्टा एंटरप्राइज़ एसपी 2 32 बिट पर पुष्टि हुई है। मुझे लगता है कि यह अन्य विंडोज संस्करणों पर काम करता है।

नोट - नीचे कोड माना जाता है Ctrl-Z वर्णों एम्बेडेड की है। मैं कसम खाता हूं कि आईई 8 के साथ देखे जाने पर मैं उन्हें इस साइट पर देखता था। लेकिन ऐसा लगता है कि वे इस पोस्ट से किसी भी तरह से खो गए हैं और मैं यह नहीं समझ सकता कि उन्हें अब कैसे पोस्ट करना है। मैं स्ट्रिंग <SUB>

::<sub>echo This will execute in batch, but it will fail as vbs. 
rem<SUB>echo This will execute in batch, and it is also a valid vbs comment 
::'<SUB>echo This will execute in batch and it is also a valid vbs comment 

एक सफल बैच/vbs संकर के लिए महत्वपूर्ण है कि साथ पात्रों से बदल दिया है। जब तक प्रत्येक बैच कमांड rem<SUB> या ::'<SUB> से पहले होता है, तो vbs इंजन इसे नहीं देख पाएगा, लेकिन बैच कमांड चलाएगा। बस सुनिश्चित करें कि आप EXIT या EXIT /B के साथ बैच भाग को समाप्त कर दें। फिर स्क्रिप्ट का शेष सामान्य दिखने वाला vbs हो सकता है।

यदि आवश्यक हो तो भी आपके पास बैच लेबल भी हो सकता है। :'Label एक वैध vbs टिप्पणी और एक मान्य बैच लेबल दोनों है।

यहां एक छोटी संकर लिपि है। (एम्बेडेड Ctrl-Z चार के स्थान पर फिर से <SUB> साथ)

::'<SUB>@cscript //nologo //e:vbscript "%~f0" & exit /b 
WScript.Echo "Example of a hybrid VBS/batch file" 

अद्यतन 2012-04-15

जेब एक समाधान है कि अजीब Ctrl-Z से बचा जाता है मिला, लेकिन यह शुरुआत में ईसीएचओ बंद प्रिंट करता है और कुछ अपरिवर्तनीय चर सेट करता है।

मुझे CTRL-Z के बिना समाधान मिला है जो अपरिवर्तनीय चर को समाप्त करता है और समझने में आसान है।

आम तौर पर विशेष वर्ण &, |, <, > आदि बैच में एक REM बयान के बाद काम नहीं करते। लेकिन विशेष पात्र REM. के बाद काम करते हैं।मुझे http://www.dostips.com/forum/viewtopic.php?p=3500#p3500 पर जानकारी का यह पता चला। एक परीक्षण से पता चलता है कि REM. अभी भी एक वैध वीबीएस टिप्पणी है। EDIT- जेब की टिप्पणी के आधार पर, REM^ (देखभाल के बाद एक जगह है) का उपयोग करना सुरक्षित है।

तो यहां REM^ & का उपयोग करके एक छोटा वीबीएस/बैच हाइब्रिड है। शुरुआत में यह केवल REM & प्रिंट करता है, जबकि जैब का समाधान ECHO OFF प्रिंट करता है।

rem^ &@cscript //nologo //e:vbscript "%~f0" & exit /b 
WScript.Echo "Example of a hybrid VBS/batch file" 

यहाँ एक और तुच्छ उदाहरण है कि एक लेबल उप दिनचर्या के लिए एक कॉल सहित कई बैच आदेश, यह दर्शाता है है।

::' VBS/Batch Hybrid 

::' --- Batch portion --------- 
rem^ &@echo off 
rem^ &call :'sub 
rem^ &exit /b 

:'sub 
rem^ &echo begin batch 
rem^ &cscript //nologo //e:vbscript "%~f0" 
rem^ &echo end batch 
rem^ &exit /b 

'----- VBS portion ------------ 
wscript.echo "begin VBS" 
wscript.echo "end VBS" 
'wscript.quit(0) 

मुझे अभी भी CTRL-Z समाधान पसंद है क्योंकि यह सभी अपर्याप्त आउटपुट को समाप्त करता है।

अद्यतन 2012-12-17

टॉम Lavedas सुविधा Google समूह में एक बैच स्क्रिप्ट भर से गतिशील VBS को चलाने के लिए एक विधि पोस्ट: No file VBS hybrid scripting। विधि mshta.exe (माइक्रोसॉफ्ट एचटीएमएल एप्लीकेशन होस्ट) का उपयोग करती है।

उनका मूल बैच समाधान एक बाहरी छोटी VBS.BAT स्क्रिप्ट पर निर्भर करता है ताकि वीबीएस को फॉर/एफ के भीतर निष्पादित किया जा सके। मैंने किसी दिए गए बैच स्क्रिप्ट के भीतर सीधे एम्बेड करने के लिए सुविधाजनक बनाने के लिए थोड़ा वाक्यविन्यास संशोधित किया।

यह काफी धीमी है, लेकिन बहुत सुविधाजनक है। यह वीबीएस की एक पंक्ति को निष्पादित करने के लिए प्रतिबंधित है।

VBS, सामान्य रूप से लिखा गया है को छोड़कर सभी उद्धरण दोगुनी किया जाना चाहिए: एक उद्धरण एक स्ट्रिंग संलग्न "" के रूप में लिखा जाना चाहिए, और एक स्ट्रिंग """" के रूप में लिखा जाना चाहिए करने के लिए आंतरिक उद्धरण। आम तौर पर मिनी स्क्रिप्ट को FOR/F के IN() खंड में निष्पादित किया जाता है। इसे सीधे निष्पादित किया जा सकता है, लेकिन केवल तभी अगर स्टडआउट को रीडायरेक्ट किया गया हो या पाइप किया गया हो।

आईई स्थापित होने तक इसे किसी भी विंडोज ओएस पर एक्सपी ऑनवर्ड पर काम करना चाहिए।

@echo off 
setlocal 
:: Define simple batch "macros" to implement VBS within batch 
set "vbsBegin=mshta vbscript:Execute("createobject(""scripting.filesystemobject"")" 
set "vbsBegin=%vbsBegin%.GetStandardStream(1).write(" 
set ^"vbsEnd=):close"^)" 

:: Get yesterday's date 
for /f %%Y in ('%vbsBegin% date-1 %vbsEnd%') do set Yesterday=%%Y 
set Yesterday 
pause 
echo(

:: Get pi 
for /f %%P in ('%vbsBegin% 4*atn(1) %vbsEnd%') do set PI=%%P 
set PI 
pause 
echo(

set "var=name=value" 
echo Before - %var% 
:: Replace = 
for /f "delims=" %%S in (
    '%vbsBegin% replace(""%var%"",""="","": "") %vbsEnd%' 
) do set "var=%%S" 
echo After - %var% 
pause 
echo(

echo Extended ASCII: 
for /l %%N in (0,1,255) do (

    %= Get extended ASCII char, except can't work for 0x00, 0x0A. =% 
    %= Quotes are only needed for 0x0D        =% 
    %= Enclosing string quote must be coded as ""    =% 
    %= Internal string quote must be coded as """"    =% 
    for /f delims^=^ eol^= %%C in (
    '%vbsBegin% """"""""+chr(%%N)+"""""""" %vbsEnd%' 
) do set "char.%%N=%%~C" 

    %= Display result =% 
    if defined char.%%N (
    setlocal enableDelayedExpansion 
    echo( %%N: [ !char.%%N! ] 
    endlocal 
) else echo( %%N: Doesn't work :(
) 
pause 
echo(

:: Executing the mini VBS script directly like the commented code below 
:: will not work because mshta fails unless stdout has been redirected 
:: or piped. 
:: 
:: %vbsBegin% ""Hello world"" %vbsEnd% 
:: 

:: But this works because output has been piped 
%vbsBegin% ""Hello world"" %vbsEnd% | findstr "^" 
pause 

अद्यतन 2014-04-27

DosTips पर वहाँ js/vbs/html/hta hybrids and chimeras in cmd/bat का एक बड़ा संग्रह है। विभिन्न लोगों से बहुत अच्छी चीजें।

उस धागे के भीतर, डॉसटिप्स उपयोगकर्ता लिविउ ने beautiful VBS/batch hybrid समाधान की खोज की जो WSF का उपयोग करता है।

<!-- : Begin batch script 
@echo off 
cscript //nologo "%~f0?.wsf" 
exit /b 

----- Begin wsf script ---> 
<job><script language="VBScript"> 
    WScript.Echo "VBScript output called by batch" 
</script></job> 

मुझे लगता है कि यह समाधान शानदार है। बैच और डब्ल्यूएसएफ अनुभाग स्पष्ट रूप से अच्छे शीर्षकों द्वारा अलग किए जाते हैं। किसी भी विषम वाक्यविन्यास के बिना बैच कोड बिल्कुल सामान्य है। केवल प्रतिबंध है बैच कोड में --> नहीं हो सकता है।

इसी तरह, डब्लूएसएफ के भीतर वीबीएस कोड बिल्कुल सामान्य है। केवल प्रतिबंध ही वीबीएस कोड में </script> नहीं हो सकता है।

एकमात्र जोखिम "%~f0?.wsf" के अनियंत्रित उपयोग को स्क्रिप्ट के रूप में लोड करने के रूप में उपयोग किया जाता है।किसी भी तरह पार्सर ठीक से पाता है और चल रहा है .बीटी स्क्रिप्ट "%~f0", और ?.wsf प्रत्यय रहस्यमय तरीके से सीएससीआरआईपीटी को स्क्रिप्ट को डब्लूएसएफ के रूप में समझने के लिए निर्देश देता है। उम्मीद है कि माइक्रोसोफ्ट कभी भी "फीचर" को अक्षम नहीं करेगा।

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

<!-- : Begin batch script 
@echo off 
echo batch output 
cscript //nologo "%~f0?.wsf" //job:JS 
cscript //nologo "%~f0?.wsf" //job:VBS 
exit /b 

----- Begin wsf script ---> 
<package> 
    <job id="JS"> 
    <script language="VBScript"> 
     sub vbsEcho() 
     WScript.Echo "VBScript output called by JScript called by batch" 
     end sub 
    </script> 
    <script language="JScript"> 
     WScript.Echo("JScript output called by batch"); 
     vbsEcho(); 
    </script> 
    </job> 
    <job id="VBS"> 
    <script language="JScript"> 
     function jsEcho() { 
     WScript.Echo("JScript output called by VBScript called by batch"); 
     } 
    </script> 
    <script language="VBScript"> 
     WScript.Echo "VBScript output called by batch" 
     call jsEcho 
    </script> 
    </job> 
</package> 
+3

'REM.' के साथ आपका दूसरा समाधान भी अच्छा है, लेकिन इसमें कमी है। यदि फ़ाइल 'REM'' (एक्सटेंशन के बिना) नाम से मौजूद है, तो 'REM.'' को 'फ़ाइल नहीं मिली' त्रुटि में परिणाम मिलता है। लेकिन आप 'REM ^:' का उपयोग कर सकते हैं, इसके बजाय, यह हमेशा काम करता प्रतीत होता है। ('आरईएम ^,' 'आरईएम ^; ',' आरईएम^') – jeb

+0

@jeb - ऐसा लगता है कि' आरईएम: 'बिना देखभाल के कभी विफल नहीं हो सकता है, और यह सबसे सरल है। या क्या एक अस्पष्ट स्थिति है जहां यह असफल हो जाती है? – dbenham

+0

हां 'रिम: \ .. \ .. \ windows \ system32 \ calc.exe' यह' rem ^: 'के साथ भी विफल रहता है, लेकिन जाहिर है यह मामला यहां महत्वपूर्ण नहीं है – jeb

10

संपादित करें: मेरा पहला जवाब VBScript, अब मेरी अगली कोशिश के लिए गलत था ...

अच्छा विचार Ctrl-Z उपयोग करने के लिए है, लेकिन मैं एक बैच फ़ाइल में नियंत्रण वर्ण पसंद नहीं है , क्योंकि & कॉपी करने के लिए समस्याग्रस्त है, उन्हें पेस्ट करें।
यह आपके ब्राउज़र के आपके ब्राउज़र के बारे में निर्भर करता है ...

आप सामान्य वर्णों और "सामान्य" कोड के साथ एक संकर वीबीस्क्रिप्ट/बैच भी प्राप्त कर सकते हैं।

:'VBS/Batch Hybrid 
: 
: 
:'Makes the next line only visible for VBScript^
a=1_ 
<1' echo off <nul 

set n=nothing' & goto :'batchCode & REM Jump to the batch code 

'VBScript-Part 
wscript.echo "VB-Start" 
wscript.echo "vb-End" 
wscript.quit(0) 

'Batch part 
:'batchCode 
set n=n'& echo Batch-Start 
set n=n'& echo two 
set n=n'& echo Batch-End 
set n=n'& cscript /nologo /E:vbscript vbTest.bat 

चाल set n=n'& साथ प्रत्येक बैच लाइन यह दोनों के लिए कानूनी है पहले जोड़ें करने के लिए है, लेकिन vbs लाइन के बाकी पर ध्यान नहीं देगा, केवल बैच लाइन के बाकी पर अमल होगा।

अन्य संस्करण :'remark ^ है, यह दोनों के लिए एक टिप्पणी है, लेकिन बैच के लिए यह टिप्पणी मल्टीलाइन चरित्र द्वारा अगली पंक्ति भी है।
VBScript देखता है तो a=1<1 लाइन के बाकी एक टिप्पणी '
बैच केवल <1' echo off <nul देखता है, 1' से पहले रीडायरेक्ट, दूसरी <nul द्वारा ओवरराइड हो जाएगा तो यह केवल echo off < nul के परिणाम है।

एकमात्र शेष समस्या यह है कि आप पहले echo off देख सकते हैं, क्योंकि यह रीडायरेक्शन के बाद @ का उपयोग करने के लिए बैच में काम नहीं करता है।

JScript के लिए एक सरल समाधान मौजूद है hybrid scripting

+0

मुझे नहीं लगता कि यह वीबीस्क्रिप्ट के लिए कैसे मदद करता है। जेस्क्रिप्ट और वीबीस्क्रिप्ट में पूरी तरह से अलग वाक्यविन्यास हैं। वास्तविक समस्या VBscript की बहु-पंक्ति टिप्पणी की कमी रही है। स्क्रिप्ट में कहीं भी एक बैच लाइन का खुलासा होने पर वीबीस्क्रिप्ट संकलित नहीं होगा। – dbenham

+0

आप सही हैं, पहले vbscript समस्याग्रस्त होने के बारे में पर्याप्त नहीं सोचते, मैं अपना उत्तर एक सहायक संस्करण – jeb

+1

+1 शानदार में बदल दूंगा। ईसीएचओ बंद होने के बाद 'और सेटलोकल 'जोड़कर सुधार किया जा सकता है। मैं n = दूसरी पंक्ति में कुछ भी नहीं ले जाऊंगा और बैच को बाहर निकलने के लिए ऊपर/बी के साथ ले जाउंगा, लेकिन यह कॉस्मेटिक है। मुझे अभी भी Ctrl-Z समाधान बेहतर पसंद है क्योंकि यह @ECHO OFF का समर्थन करता है, और क्योंकि यह किसी भी बाहरी चर सेट नहीं करता है। बदसूरत नियंत्रण वर्ण बनाम अवांछित ईसीएचओ ऑफ आउटपुट - हम सभी को हमारे जहर का चयन करना है :-) – dbenham

2

और मेरे प्रयास (first posted here) यह जेब के समाधान जैसा दिखता है, लेकिन (कम से कम मेरे हिसाब से) कोड अधिक पठनीय है:

:sub echo(str) :end sub 
echo off 
'>nul 2>&1|| copy /Y %windir%\System32\doskey.exe %windir%\System32\'.exe >nul 

'& echo/ 
'& cscript /nologo /E:vbscript %~f0 
'& echo/ 
'& echo BATCH: Translation is at best an ECHO. 
'& echo/ 
'& pause 
'& rem del /q "%windir%\System32\'.exe" 
'& exit /b 

WScript.Echo "VBScript: Remorse is the ECHO of a lost virtue." 
WScript.Quit 

और स्पष्टीकरण:

  1. ' (एकल quot ई) विंडोज़ में फ़ाइल नाम के हिस्से के रूप में वर्जित प्रतीक नहीं है इसलिए '.exe
  2. फाइलों के साथ पैक किए गए कुछ कमांड हैं जो कमांड लाइन पैरामीटर के बिना कुछ भी नहीं करते हैं। सबसे तेज़ (कुछ भी नहीं करने पर) और आकार के रूप में सबसे प्रकाश (मेरे परीक्षण के अनुसार) subst.exe और doskey.exe
  3. तो पहली पंक्ति पर मैं मुकाबला कर रहा हूँ doskey.exe'.exe को (यदि वह पहले नहीं मौजूद हैं) और फिर '& के रूप में यह इस्तेमाल करते रहने के (हैं चूंकि .exe एक्सटेंशन % PATHEXT%) होना चाहिए। इसे वीबीस्क्रिप्ट में एक टिप्पणी के रूप में लिया जाएगा और बैच में कुछ भी नहीं होगा - बस लाइन पर अगले आदेश के साथ जारी रहेगा। '& rem del /q .\'.exe

    :

कुछ खामियां निश्चित रूप से .at कम से कम पहली बार चलाने के लिए अंततः आप व्यवस्थापक अनुमतियों की आवश्यकता होगी %windir%\System32\ में मुकाबला हो सकता है denied.For मजबूती के रूप में आप भी अंत में '>nul 2>&1|| copy /Y %windir%\System32\doskey.exe .\'.exe >nul उपयोग कर सकते हैं और फिर रहे हैं

'.exe आपके पथ में छोड़ा गया है, तो आप अनजाने में इसे अनुचित तरीके से उपयोग करने के लिए अनजाने में उपयोग कर सकते हैं, और'exe 'की प्रत्येक पंक्ति पर निष्पादन अंततः प्रदर्शन को कम कर सकता है।

.. और बैच भाग कमांड में केवल एक पंक्ति में होना चाहिए।

अपडेट 9.10.13 (ऊपर सम्मेलन ..following)

यहाँ एक और तरीका है जो बैच फ़ाइल के स्व-नाम की आवश्यकता है:

@echo off 
goto :skip_xml_comment 
<!-- 
:skip_xml_comment 

echo(
echo Echo from the batch 
echo(

(ren %0 %0.wsf 
cscript %0.wsf 
ren %0.wsf %0) 


exit /b 0 
--> 

<package> 
    <job id="vbs"> 
     <script language="VBScript"> 

     WScript.Echo "Echo from the VBS" 

     </script> 
    </job> 
</package> 

और एक संक्षिप्त विवरण:

  1. जब बैच का नाम बदल दिया जाता है और उसका नाम बदलकर पुराने नाम से किया जाता है, और यह एक पंक्ति (या ब्रैकेट्स) में किया जाता है तो स्क्रिप्ट को बिना किसी के साथ निष्पादित किया जाएगा त्रुटियों। इस मामले में CSCRIPT.EXE की एक कॉल भी .WSF फ़ाइल के साथ जोड़ा गया है। स्वयं-नामकरण थोड़ा जोखिम भरा है, लेकिन एक temp फ़ाइल से तेज़ है।
  2. विंडोज स्क्रिप्ट होस्ट xml डेटा के बाहर की वस्तुओं के लिए बहुत अधिक परवाह नहीं करता है जब तक कोई विशेष xml प्रतीकों & < > ; नहीं हैं @echo off और goto चिंता के बिना उपयोग किया जा सकता है। लेकिन सुरक्षा के लिए xml टिप्पणी (या सीडीएटीए) अनुभाग में बैच कमांड डालना अच्छा है। बैच से त्रुटि संदेशों से बचने के लिए मैंने को goto के साथ छोड़ दिया है।
  3. पहले एक्सएमएल टिप्पणी बैच स्क्रिप्ट को बंद करने exit

साथ समाप्त होता है तो अच्छी बातें एक पंक्ति में आदेश सभी बैच कोड लिखने की कोई आवश्यकता नहीं है, वहाँ कोई परेशान echo off दिखाया गया है, JScript कोड और अलग है यह है कि कर रहे हैं नौकरियों को स्क्रिप्ट में जोड़ा जा सकता है। विशेष संकेतों की कोई आवश्यकता नहीं है और अतिरिक्त एक्सई फाइलों जैसे '.exe

दूसरी तरफ स्वयं-नामकरण जोखिम भरा हो सकता है।

3

मैंने http://www.dostips.com/forum/viewtopic.php?p=37780#p37780 पर एक स्क्रिप्ट में सभी समाधानों को इकट्ठा करने का प्रयास किया है।

बैच स्क्रिप्ट एक बैच फ़ाइल में सबसे लोकप्रिय भाषाओं परिवर्तित (.js, .vbs, .ps1, .wsf, .hta और ऐतिहासिक .pl) नहीं है ।

यह काम करता है इस प्रकार है:

 

    :: convert filename1.vbs to executable filename1.bat 
    cmdize.bat filename1.vbs 

1

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

test.bat     <- a file called "test.bat" 
test.bat:script_.vbs  <- an ADS of file "test.bat" called "script_.vbs" 

आप एक और अधिक technicall और ADS वेब में के के व्यापक वर्णन मिल सकता है, लेकिन अब यह है कि इस सुविधा को NTFS डिस्क केवल पर काम करता है उल्लेख करना महत्वपूर्ण है। अब, देखते हैं कि इस विशेष समस्या को हल करने के लिए इस सुविधा का उपयोग कैसे करें।

सबसे पहले, मूल बैच फ़ाइल को सामान्य तरीके से बनाएं। तुम भी इस तरह से कमांड लाइन से notepad.exe शुरू हो सकता है:

notepad test.bat 

मेरी उदाहरण के लिए, मैं test.bat में निम्नलिखित लाइनों डाला:

@echo off 
setlocal 

For /f "delims=" %%i in ('Cscript //nologo "test.bat:script_.vbs" "Select a folder"') do Set "folder=%%i" 

echo Result: "%folder%" 

नोट VBS स्क्रिप्ट का नाम है। बाद test.bat बचा लिया गया था और नोटपैड, बंद कर दिया नोटपैड का उपयोग कर VBS स्क्रिप्ट बनाने, तो कमांड लाइन पर इस आदेश को दर्ज करें:

notepad test.bat:script_.vbs 

और हमेशा की तरह स्क्रिप्ट बनाने:

Dim objFolder, objShell 
Set objShell = CreateObject("Shell.Application") 
Set objFolder = objShell.BrowseForFolder(0, "Select a folder.", &H4000, 0) 
If Not (objFolder Is Nothing) Then 
    wscript.echo objFolder.Self.path 
Else 
    wscript.echo 0 
End If 

सहेजें इस फ़ाइल करें और test.bat चलाएं। यह काम करता हैं! ;)

आप dir आदेश में /R स्विच के माध्यम से विज्ञापन test.bat फ़ाइल की समीक्षा कर सकते हैं। आप this post पर इस विधि और इसकी सीमाओं की एक और व्यापक व्याख्या पढ़ सकते हैं।

संबंधित मुद्दे