मैं बैच स्क्रिप्ट बनाने का प्रयास करता हूं जो बैच में दो एक्सएमएल टैग के बीच एक मान निकाल सकता है।

मुझे एक कर्ल सीएमडी निष्पादित करके मेरी एक्सएमएल फ़ाइल मिलती है जिसे मैं एक अस्थायी फ़ाइल पर रीडायरेक्ट करता हूं:

curl -X POST -H "key:value" -i http://mywebsite/ask -d "<xml body>" > tmp

फिर, मैं अपना टैग इस तरह खोजता हूं:

findstr "<abc:id>" tmp

मैं cmd ​​कंसोल में देख सकता हूं कि सही लाइन प्रदर्शित होती है:

<abc:id>the_id_that_i_want</abc:id>

लेकिन उसके बाद मुझे अपनी आईडी नहीं मिल रही है।

मैंने पहले ही 'findstr' परिणाम को एक फ़ाइल में अग्रेषित करने का प्रयास किया है, फिर इसे सफलता के बिना पढ़ना।

मैंने इस स्क्रिप्ट का उपयोग करने का भी प्रयास किया है:

for /F "delims=" %%i in ('findstr "<abc:id>" tmp') do set var=%%i
echo %var%

लेकिन मेरी स्क्रिप्ट इको स्टेटमेंट पर क्रैश हो जाती है।

तो, कैसे मेरी आईडी निकाल सकते हैं और इसे एक चर में सेट कर सकते हैं?

0
MonkeyJLuffy 18 जून 2018, 18:33

2 जवाब

सबसे बढ़िया उत्तर

कमांड लिखने के लिए एक चीज है: setlocal enabledelayedexpansion। यदि नहीं, तो 'के लिए' सही ढंग से नहीं चलाया जा सकता है।

एक और बात यह थी कि वेरिएबल का उपयोग % टैग के साथ नहीं, बल्कि ! टैग के साथ किया जाता था। कि रीडायरेक्टर्स (> और <) के साथ वेरिएबल टेक्स्ट का उपयोग करें।

अंत में, मुझे वह स्क्रिप्ट मिलती है:

curl -X POST -H "key:value" -i http://mywebsite/ask -d "<xml body>" > tmp

setlocal enabledelayedexpansion

for /F "delims=" %%i in ('findstr "<abc:id>" tmp') do set var=%%i

for /F "tokens=1,2 delims=<abc:id>" %%a in ("!var!") do set var2=%%b

DEL tmp

ECHO Id : !var2!
0
MonkeyJLuffy 27 जून 2018, 12:36
for /F "tokens=2delims=<>"...

लाइन लेता है

<abc:id>the_id_that_i_want</abc:id>

और इसे डिलीमीटर के रूप में < और > का उपयोग करके टोकनाइज करता है।

पहला टोकन abc:id, दूसरा the_id_that_i_want और तीसरा /abc:id है

इसलिए आपको दूसरा चुनना होगा।

echo क्रैश हो जाता है क्योंकि echoed होने वाली स्ट्रिंग में रीडायरेक्टर (> और <) होते हैं।

1
Magoo 18 जून 2018, 18:38