2010-04-30 22 views
6

मेरे पास एक .cmd फ़ाइल द्वारा लॉन्च किया गया जावा एप्लिकेशन है। मैं इस बैच के माध्यम से एप्लिकेशन के क्लासपाथ को सेट करना चाहता हूं, सभी जरूरी जार एक lib फ़ोल्डर में हैं।बैच और लूप के लिए

यहाँ मैं क्या करने की कोशिश की है:

set _classpath=. 
for %%i in (%1/lib/*.*) do (set _classpath=%_classpath%;%%i) 

हैरानी की बात है, ऐसा लगता है के रूप में उम्मीद है कि यह काम नहीं करता है।

  1. सेट:

    • pikachu.jar
    • sonic.jar
    • mario.jar

    यह इस प्रकार होता है: मान लीजिए कि वहाँ lib फ़ोल्डर में 3 जार करते हैं _classpath =।

  2. सेट _classpath = .; pikachu.jar
  3. सेट _classpath = .; sonic.jar
  4. सेट _classpath = .; mario.jar

जाहिर है, मैं क्या पाने के लिए देख रहा हूँ

है sonic.jar; mario.jar

किसी भी विचार

  • _classpath = .; pikachu.jar सेट ?

    धन्यवाद और सादर,

+1

क्यों आप एक बैच फ़ाइल की जरूरत classpath शामिल करने के लिए करते हैं? क्या आपने नई जावा 6 चाल '-सीपी "lib/*" देखी है, जिसमें स्मैश प्रशंसक – Pyrolistical

+1

+1 में सभी जार शामिल होंगे दुर्भाग्य से, जावा 5 का उपयोग करने की आवश्यकता है ... लेकिन इसके लिए धन्यवाद, निश्चित रूप से जावा 6 परियोजनाओं के लिए उपयोगी हो। –

+0

के लिए lib निर्देशिका – Farid

उत्तर

4

अपने बैच फ़ाइल के शीर्ष पर जगह इस:

setlocal enabledelayedexpansion 
फिर अंदर पाश के लिए

, !_classpath!

बिना देरी विस्तार सक्षम, %_classpath% साथ %_classpath% की जगह की शुरुआत में एक बार विस्तार किया जाता है, अपने पाश के लिए।


[संपादित करें] एक टिप्पणी के जवाब में, यहाँ है एक पूर्ण कोड-लिस्टिंग

@echo off 
setlocal enabledelayedexpansion 

set _classpath=. 
for %%i in (%1/lib/*.*) do (
    set _classpath=!_classpath!;%%i 
) 

echo %_classpath% 
pause 
+0

धन्यवाद ब्लूराजा (धन्यवाद रिचर्ड भी।), इस दृष्टिकोण का उपयोग करते समय एक और मुद्दा आ रहा है। मैं देख सकता हूं कि लूप के अंत में क्लासपाथ कुछ ऐसा दिखता है: ।; Pikachu.jar; sonic.jar; मारियो।जार रिक्त स्थान अप्रत्याशित हैं और चोट पहुंचेंगे। क्या आप उनसे छुटकारा पाने के लिए एक त्वरित तरीका जानते हैं? मुझे लगता है कि हम %% पर सही ट्रिम कर सकते हैं? – Farid

+0

@ फ़ारिड: ऐसा इसलिए है क्योंकि आपके पास अपने ब्लॉक के अंत में एक स्थान है। संपादित उत्तर देखें। –

+0

बहुत बहुत धन्यवाद! – Farid

1

CMD.EXE पाश चलाने से पहले %...% विस्तार हो रहा है।

आपको विलम्ब विस्तार में देरी की आवश्यकता है, यह कमांड प्रॉम्प्ट से set /? में समझाया गया है।

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