2008-10-24 12 views
8

मैं बैच स्क्रिप्ट में बाद में उपयोग के लिए बैच फ़ाइल से चर पढ़ने की कोशिश कर रहा हूं, जो एक जावा लॉन्चर है। मैं आदर्श रूप से सभी प्लेटफार्मों (यूनिक्स, विंडोज) पर सेटिंग्स फ़ाइल के लिए एक ही प्रारूप रखना चाहता हूं, और एक मान्य जावा गुण फ़ाइल भी हो। यही कारण है, यह इस तरह दिखना चाहिए:विंडोज बैच (cmd.exe) में फ़ाइल से पर्यावरण चर पढ़ें

setting1=Value1 
setting2=Value2 
... 

वो यूनिक्स खोल स्क्रिप्ट में की तरह क्या तुम करोगी इस तरह के मूल्यों को पढ़ने के लिए संभव है? कुछ इस तरह दिख सकता है चाहिए:

READ settingsfile.xy 
java -Dsetting1=%setting1% ... 

मुझे पता है कि यह शायद SET setting1=Value1 साथ संभव है, लेकिन मैं वास्तव में नहीं बल्कि सभी प्लेटफार्मों पर सेटिंग्स के लिए एक ही फ़ाइल स्वरूप होगा।

स्पष्टीकरण के लिए: मुझे कमांड लाइन/बैच पर्यावरण में ऐसा करने की आवश्यकता है क्योंकि मुझे ऐसे पैरामीटर सेट करने की भी आवश्यकता है जिन्हें JVM, जैसे -Xmx या -classpath के भीतर से बदला नहीं जा सकता है।

उत्तर

15

आप इस प्रकार एक बैच फ़ाइल में ऐसा कर सकते हैं:

setlocal 
FOR /F "tokens=*" %%i in ('type Settings.txt') do SET %%i 
java -Dsetting1=%setting1% ... 
endlocal 

यह और "SETTING1 = VALUE1" की तरह तार कॉल उन्हें वातावरण चर के रूप में स्थापित करने के लिए सेट से युक्त एक पाठ फ़ाइल पढ़ता है।

सेटलोकल/एंडलोकल का उपयोग आपके चरखी फ़ाइल के निष्पादन के लिए पर्यावरण चर के दायरे को सीमित करने के लिए किया जाता है।

सीएमडी कमांड प्रोसेसर वास्तव में काफी शक्तिशाली है, हालांकि इसके बजाय बीजान्टिन सिंटैक्स के साथ।

+0

एक समाधान की तलाश में लंबे समय बाद, मुझे यह समाधान मिला। धन्यवाद! – Pereira

2

आप जावा प्रोग्राम को पैरामीटर के रूप में प्रॉपर्टी फ़ाइल पास कर सकते हैं (जो बाद में मुख्य प्रोग्राम लॉन्च कर सकता है)। और फिर बहु ​​मंच प्रतिमान से लाभ।

+0

हाँ, कि छ: उस मामले मैं जैसे निम्नलिखित एक समारोह की सिफारिश ईमानदारी से सच है, लेकिन मुझे -Xmx जैसी चीजों को कॉन्फ़िगर करने की आवश्यकता है, जो JVM चलने के बाद निश्चित रूप से बदला नहीं जा सकता है। –

+0

ओह, मैं देखता हूं, यह लगता है कि समाधान की तुलना में ओवरकिल लगता है लेकिन आप जावा को किसी अन्य जावा से फिर से लॉन्च कर सकते हैं। मेरा गलत मत बनो मैं चयनित समाधान पसंद करता हूं। –

0

तुम भी एक जावा प्रोग्राम के भीतर से ओएस 'वातावरण चर का उपयोग कर सकते हैं:

import java.util.Map; 

public class EnvMap { 
    public static void main (String[] args) { 
     Map<String, String> env = System.getenv(); 
     for (String envName : env.keySet()) { 
      System.out.format("%s=%s%n", envName, env.get(envName)); 
     } 
    } 
} 
1

यह फ़ाइल (जिन्हें आप समय के बारे में आगे पता) एक गुण से ही आयात विशिष्ट चरों को बुद्धिमान हो सकता है, में

:parsePropertiesFile 
    set PROPS_FILE=%1 
    shift 
    :propLoop 
    if "%1"=="" goto:eof 
    FOR /F "tokens=*" %%i in ('type %PROPS_FILE% ^| findStr.exe "%1="') do SET %%i 
    shift 
    GOTO propLoop 
goto:eof 

कौन सा call:parsePropertiesFile props.properties setting1 setting2 द्वारा कहा जा सकता है चर setting1 और setting2 स्थापित करने के लिए

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