बैच फ़ाइल के माध्यम से कई कार्यक्रमों की अनुपलब्ध स्थापना


1

मैं निर्धारित करके सॉफ्टवेयर स्थापित कर सकते हैं auto=1में install.infऔर उसके बाद निम्न स्क्रिप्ट का उपयोग:

@echo off
for /F "tokens=2 delims=<>" %%i in ('type test.xml ^|find "<install>"') do (
set setup=%%i 
echo installing %installer% >>log.txt
%setup% 
)
@echo on 

XML कॉन्फ़िगरेशन फ़ाइल ( test.xml):

<?xml version="1.0" encoding="UTF-16"?>

<install>C:\Users\UIDW6331\Desktop\tcm801x64\INSTALL.EXE</install>
<install>C:\Users\UIDW6331\Desktop\tcm801x64\INSTALL.EXE</install>

स्थापना काम करती है, हालांकि, मैं इसे एक विशिष्ट गंतव्य निर्देशिका में स्थापित करना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

इसके अलावा, जब मैं स्विच का उपयोग करता हूं:

start /w %setup% /norestart /silent

या

%setup% /passive /norestart 

मुझे निम्नलिखित त्रुटि मिलती है:

सेटअप सूचना फ़ाइल नहीं मिली। आपको install.exe चलाने से पहले पूरे संग्रह को अनपैक करना होगा। स्थापना निरस्त

इसे कैसे सुधारा जा सकता है?

जवाबों:


2

मुझे आपके सीधे सवालों के बारे में कोई जानकारी नहीं है। लेकिन आपकी बैच फ़ाइल लिखित रूप में काम नहीं कर सकती है।

आप %setup%समान कोड ब्लॉक (लूप) के लिए उपयोग नहीं कर सकते हैं जो मान सेट करता है क्योंकि पूरे ब्लॉक को एक पास में पार्स किया जाता है, और पार्सिंग होने से पहले मूल्य का विस्तार किया जाता है। मान ठीक से सेट हो जाता है, लेकिन विस्तारित मूल्य वह मूल्य होगा जो आपके लूप में प्रवेश करने से पहले मौजूद था।

पहली बार जब आप अपना बैच स्क्रिप्ट चलाते हैं, तो setupचर अभी तक परिभाषित नहीं किया गया है, इसलिए यह पूरी तरह से विफल हो जाता है। मान सेट हो जाता है, लेकिन आपका लूप इसे नहीं देख सकता है। आपकी स्क्रिप्ट नहीं है setlocal, इसलिए जो अंतिम मान सेट किया गया था वह स्क्रिप्ट समाप्त होने पर संरक्षित है। अगली बार जब आप अपनी स्क्रिप्ट चलाते हैं, तो यह आपकी XML फ़ाइल की प्रत्येक पंक्ति के अंतिम रन से संरक्षित मूल्य का उपयोग करेगा।

मैं तुम्हें प्रतिस्थापन इस विशेष समस्या को ठीक कर सकते हैं का मानना है call %%setup%%के लिए %setup%

संपादित करें

या बेहतर अभी तक, बस setupचर को पूरी तरह से समाप्त करें और %%iसीधे उपयोग करें:

for /F "tokens=2 delims=<>" %%i in ('type test.xml ^|find "<install>"') do (
  echo installing %installer% >>log.txt
  %%i
)

नोट - मुझे समझ नहीं आ रहा है कि installerमूल्य कहां से आ रहा है। मैं मान रहा हूं कि आप जानते हैं कि आप क्या कर रहे हैं, लेकिन यह मुझे अजीब लगता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.