2012-02-22 11 views
7

का उपयोग कर किसी दिए गए निर्देशिका में बैच फ़ाइल चलाना जब मैं अपने बैच फ़ाइल के स्थान पर जाता हूं और इसे खोलता हूं, तो बैच फ़ाइल काम करती है। मेरे बैच फ़ाइल बस है:वीबीए

cd .\data 
dir/b/o:n > names.txt 

आप देख सकते हैं, मैं अपने मौजूदा निर्देशिका में हूँ और उप निर्देशिका "डाटा" करने के लिए नीचे जाने और सभी के नाम मुकाबला और एक फ़ाइल names.txt कहा जाता है का निर्माण।

जब मैं कहता हूँ

shell "location of file" 

यह बैच फ़ाइल को खोलता है, लेकिन निर्देशिका कि सामान्य रूप से है C:\my documents है, इसलिए मेरी आज्ञाओं क्योंकि यह उप निर्देशिका नहीं मिल रहा है काम नहीं करेगा। मैं चाहता हूं कि यह गतिशील बैच फ़ाइल हो, और इसलिए मुझे वीबीए में कुछ लिखना होगा जो बैच फ़ाइल को अपनी वर्तमान निर्देशिका या इस प्रभाव से कुछ खोल देगा।

मैं यह कैसे कर सकता हूं?

+0

पठनीयता के लिए, कृपया अपने प्रश्नों को सही ढंग से स्वरूपण और वर्तनी में कुछ प्रयास करें। मैंने इस बार आपके लिए तय किया है। ध्यान दें कि '{} 'बटन का उपयोग करके कोड को कोड के रूप में' स्वरूपित किया जा सकता है। –

+0

क्षमा करें, साइट पर नया। – Jason

उत्तर

1

सी: \ मेरा दस्तावेज़ शायद वह निर्देशिका है जहां आपकी स्पीडशीट स्थित है। आप अपने शैल कमांड शुरू करने से पहले

ChDir "C:\TheFolderWhereYourBatchIs" 

जोड़ सकते हैं और है कि काम करना चाहिए तो ...

फिर, आप अपने बैच फ़ाइल एक रिश्तेदार एक के बजाय एक निरपेक्ष निर्देशिका का उपयोग करने के लिए बदल सकता है।

+0

http://stackoverflow.com/questions/9442467/calling-batch-file-in-vba-not-working-properly], यह समस्या का एक बेहतर विवरण है। हालांकि प्रतिक्रिया के लिए धन्यवाद। – Jason

6

निम्नलिखित आपको जो प्रभाव चाहते हैं उसे आपको देना चाहिए।

मेरे परीक्षण कोड है:

Option Explicit 
Sub TryShell() 

    Dim PathCrnt As String 

    PathCrnt = ActiveWorkbook.Path 
    Call Shell(PathCrnt & "\TryShell.bat " & PathCrnt) 

End Sub 

मेरा परीक्षण बैच फ़ाइल TryShell.bat नाम और शामिल है:

cd %1 
dir *.* >TryShell.txt 

मैं युक्त कार्यपुस्तिका को उसी फ़ोल्डर में मेरी बैच फ़ाइल रखा है मेरी मैक्रो।

कथन PathCrnt = ActiveWorkbook.Path सक्रिय कार्यपुस्तिका वाली निर्देशिका के नाम पर पथक्रेंट सेट करता है। आप PathCrnt को जो भी निर्देशिका चाहते हैं उसे सेट कर सकते हैं।

जब मैं Shell पर कॉल करता हूं, तो मैंने पैरामीटर के रूप में PathCrnt जोड़ा है।

मेरी बैच फ़ाइल में, मैंने वर्तमान निर्देशिका को %1 पर सेट किया जो पहला पैरामीटर है।

dir कमांड काम करता है जैसा कि मेरी इच्छा है क्योंकि वर्तमान निर्देशिका मेरी निर्देशिका है और सिस्टम डिफ़ॉल्ट निर्देशिका नहीं है।

आशा है कि यह स्पष्ट है।

+0

अभी भी एक ही समस्या है। मुझे लगता है कि अगर किसी को डॉस में कमांड पता है तो फ़ाइल आसान स्थान (जहां भी यह है) को कॉल करेगा, उस स्थान को एक चर के रूप में स्टोर करें, फिर परिवर्तनीय नाम {cd variable_name} के साथ निर्देशिका बदलें।यह सही स्थान प्राप्त करेगा और फिर मैं अपनी बैच फ़ाइल चला सकता हूं। – Jason

+0

मुझे "अभी भी एक ही समस्या" नहीं समझा। यदि मैक्रो बैच फ़ाइल का स्थान जानता है, तो यह बैच फ़ाइल को सही तरीके से कॉल कर सकता है और स्थान को पैरामीटर के रूप में पास कर सकता है। मैंने अपने test फ़ोल्डर के रूप में 'ActiveWorkbook.Path' का उपयोग किया है क्योंकि यह मेरे लिए सुविधाजनक था लेकिन आप इसे किसी और चीज़ में बदल सकते थे। यदि मैक्रो बैच फ़ाइल का स्थान नहीं जानता है तो एक डॉस कमांड कैसे हो सकता है जो इसे पायेगा। –

+0

क्या कुछ बदल गया है जिसे मैं देख रहा हूं या आपने अभी तक पूरा विवरण जोड़ना है। –