2011-03-21 13 views
5

विंडोज़ x64 संस्करणों में "\ Program Files (x86)" जैसे ब्रांड्स नामक फ़ोल्डर होते हैं और यह मेरे द्वारा उपयोग की जाने वाली बैच फ़ाइल को तोड़ देता है। एक समस्या लाइन का एक उदाहरण:विंडोज x64 और "पथ में ब्रांडेसिस" बैच फ़ाइल समस्या

(% पथ%) में %% ग के लिए

मौजूद है या नहीं "%% ग \ xyz.exe" सेट xyz = ठीक

यानी जब यह तक पहुँच जाता है ")" में " (x86) "यह एक त्रुटि संदेश डालता है और बाहर निकलता है ...

इसे ठीक करने के तरीके पर कोई विचार? यह एक नहीं बल्कि बड़े बैच फ़ाइल है, और एटीएम मैं समय एक बेहतर भाषा में इसे फिर से लिखने की जरूरत नहीं है ...

बहुत धन्यवाद :)

+0

आप यकीन है कि तुम बहुत सटीक 'FOR' अनुदेश की नकल की हैं कोड यह कैसा दिखता रूप
"C:\temp" "C:\windows" "C:\Program Files (x86)"

में खोज करेंगे? –

+0

@PA हां, मैं त्रुटि को पुन: उत्पन्न कर सकता हूं। मैं बस एक त्वरित फिक्स के बारे में नहीं सोच सकता। –

+0

@PA हां मैंने केवल निष्पादन योग्य नाम को xyz में बदल दिया ... – stereochilly

उत्तर

5

सीधे आपके प्रश्न का उत्तर नहीं देता है, लेकिन यदि आप ऐसा करने की कोशिश कर रहे हैं जो मैं सोच रहा हूं कि आप कोशिश कर रहे हैं (जो सुनिश्चित करता है कि पथ में कोई फ़ाइल मौजूद है) तो आप बैच फ़ाइल में निम्न की तरह कुछ उपयोग कर सकते हैं।

@echo off 
    for %%i in (xyz.exe) do set xyz=%%~$PATH:i 

    if "%xyz%" == "" Goto NotFound 

    Echo "Found" 
    Goto TheEnd 

:NotFound 
    Echo "Not found" 

:TheEnd 
+0

अच्छा विचार ... मैं इसे भी आजमाउंगा ... – stereochilly

+0

अद्भुत काम करता है ... :) और क्या मैं पूछ सकता हूं कि सभी %% ~ $: मतलब? बहुत क्रिप्टिक ...;) – stereochilly

+0

@stereo जो सभी के उपयोग में प्रलेखित है। कंसोल पर /? के लिए टाइप करें। –

2

आप के लिए फ़ोल्डर की कमी के नाम का इस्तेमाल कर सकते हैं यह उद्देश्य इसे आपको इसी तरह करना होगा।

विंडोज़ में ओपन कमांड प्रोमेट। सी ड्राइव (या ड्राइव जिसमें आप कार्यक्रम फ़ोल्डर है) प्रकार निम्नलिखित में जाओ और

c:\> dir /x <Hit Enter> 

यह सभी फ़ोल्डर के छोटे रूपों वापस आ जाएगी।

अब आप देखेंगे कि "प्रोग्राम प्रोग्राम (x86)" को "PROGRA ~ 2" (या समकक्ष लघु नाम) के रूप में दर्शाया जाएगा। बैच स्क्रिप्ट बनाने के दौरान मैं किसी भी त्रुटि को रोकने के लिए उपयोग करता हूं।

अधिक विकल्पों के लिए यहां देखें। http://www.computerhope.com/dirhlp.htm

"dir/x"
"यह गैर 8dot3 फ़ाइल नाम के लिए उत्पन्न लघु नाम प्रदर्शित करता है। प्रारूप इस बात का/है छोटा नाम लंबे नाम से पहले डाला के साथ एन। अगर कोई के लिए Exlpanation संक्षिप्त नाम मौजूद है, इसके स्थान पर रिक्त स्थान प्रदर्शित होते हैं। "

+0

ओपी का पाथ पर्यावरण चर नहीं होगा छोटे नामों का उपयोग करें। –

+0

क्या इस तरह के दृष्टिकोण से उन्हें सभी पथों के माध्यम से "पथ" पर्यावरण परिवर्तक द्वारा आयोजित किए गए लोगों के विपरीत पुनरावृत्ति नहीं करना पड़ेगा? – BrMcMullin

+0

यह एक मैन्युअल दृष्टिकोण है, "के उद्देश्य को हराकर कथन "और सामान्य रूप से बैच फ़ाइलों को चलाने का ... – stereochilly

3

आम तौर पर के हवाले से काम करना चाहिए, लेकिन इस मामले में आप ; से अलग सभी तत्वों से अधिक पुनरावृति करना चाहते हैं।

लेकिन आप ; को " " संयोजन में प्रतिस्थापित कर सकते हैं, इसलिए ब्रैकेट उद्धृत किए गए हैं और आप तत्वों पर फिर से सक्रिय हो सकते हैं।

नमूना: path=C:\temp;C:\windows;C:\Program Files (x86)
के लिए लूप

setlocal EnableDelayedExpansion 
set "searchPath=!path:;=" "!" 
for %%c in ("!searchPath!") do (
    if exist "%%~c\xyz.exe" set xyz=OK 
) 
+0

अच्छा ... धन्यवाद :) – stereochilly

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