बैच स्क्रिप्टिंग के लिए बहुत नया। मुझे एक चर को असाइन करने के लिए कमांड के आउटपुट की आवश्यकता है। मुझे फॉर/एफ कमांड के बारे में पता चला। मेरे आदेश में रिक्त स्थान हैं और दोहरे उद्धरण चिह्न भी हैं। इसलिए मैंने usebackq विकल्प का उपयोग करने की कोशिश की। लेकिन यह अंतरिक्ष पर त्रुटि के साथ विफल रहता है।

for /F "usebackq delims=" %%G IN (`"C:\Program Files (x86)\ABC\DEF\XYZ.exe" Get /a "P1=D2" /b "Q1=D3" /c "D5"`) DO (
SET var=%%G
)

ECHO %var%

pause

विफलता:

'C:\Program' is not recognized as an internal or external command,
operable program or batch file.

StackOverflow पर अन्य प्रश्नों के अनुसार, मैंने सब कुछ ठीक किया - usebackq बैक टिक के उपयोग के लिए, demlims= एक सीमांकक के रूप में रिक्त स्थान को अनदेखा करने के लिए। मुझे यकीन नहीं है कि यह अभी भी क्यों विफल हो रहा है। किसी भी मदद की सराहना की जाती है!

4
Midhun Agnihotram 18 जुलाई 2020, 22:29

2 जवाब

पोस्ट की गई लाइन प्रोग्राम नाम के बाद पैरामीटर के आसपास अतिरिक्त उद्धरणों के कारण विफल हो जाती है। एक वर्कअराउंड पूरी कमांड लाइन को बाहरी उद्धरणों की एक और जोड़ी के अंदर एम्बेड करना है (और आरक्षित वर्णों जैसे () से ^(^) से बचें क्योंकि वे अब एक उद्धृत स्ट्रिंग के बाहर आते हैं)।

for /F "usebackq delims=" %%G IN (`""C:\Program Files ^(x86^)\ABC\DEF\XYZ.exe" Get /a "P1=D2" /b "Q1=D3" /c "D5""`) do (...)

जैसा कि एक टिप्पणी में उल्लेख किया गया है, इस मामले में वास्तव में usebackq की आवश्यकता नहीं है, और इसके बजाय नियमित उद्धरणों का उपयोग करने पर वही सिंटैक्स काम करेगा।

0
dxiv 19 जुलाई 2020, 01:43

यहां बैकटिक्स या usebackq का उपयोग करने की कोई आवश्यकता नहीं है, बस सिंगल कोटेड स्ट्रिंग का उपयोग करें और अपने पथ को डबल कोट करें।

@echo off
for /F "delims=" %%G IN ('"C:\Program Files (x86)\ABC\DEF\XYZ.exe" Get /a "P1=D2" /b "Q1=D3" /c "D5"') do set "var=%%G"

यह भी ध्यान दें कि वेरिएबल सेट करने के लिए कोष्ठकित do कोड ब्लॉक की आवश्यकता नहीं है, वास्तव में, जहां तक ​​​​मैं देख सकता हूं, आपको वेरिएबल की भी आवश्यकता नहीं है क्योंकि आप केवल मेटावेरिएबल का उपयोग करके दूर हो सकते हैं।

@echo off
set "prog=C:\Program Files (x86)\ABC\DEF\XYZ.exe"
for /F "delims=" %%G IN ('"%prog%" Get /a "P1=D2" /b "Q1=D3" /c "D5"') do echo %%G
0
Gerhard 19 जुलाई 2020, 13:20