for
आदेश आप देना चाहिए कि आप क्या चाहते:
for /f "tokens=1,2*" %%a in ("%*") do echo command -Duser=%%a -Dpwd=%%b %%c
मदद से
for
के लिए
(for /?
):
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
, myfile.txt में प्रत्येक पंक्ति को पार्स होगा लाइनों कि एक साथ शुरू की अनदेखी अर्धविराम, प्रत्येक पंक्ति से दूसरे और तीसरे टोकन को शरीर के लिए पास करता है, जिसमें कॉमा और/या रिक्त स्थान से घिरे टोकन होते हैं। बॉडी स्टेटमेंट संदर्भ% के लिए नोटिस मुझे दूसरा टोकन,% j प्राप्त करने के लिए तीसरा टोकन प्राप्त करने के लिए, और% के बाद सभी शेष टोकन प्राप्त करने के लिए% k। रिक्त स्थान वाले फ़ाइल नामों के लिए, आपको फ़ाइल नामों को डबल कोट्स के साथ उद्धृत करने की आवश्यकता है। इस तरह से डबल कोट्स का उपयोग करने के लिए, आप को उपयोगबैक विकल्प का उपयोग करने की आवश्यकता है, अन्यथा डबल कोट्स को पार्सल के लिए एक शाब्दिक स्ट्रिंग को परिभाषित करने के रूप में व्याख्या किया जाएगा।
तो मेरी समाधान में, %%a
स्क्रिप्ट के लिए पारित पहला तर्क के मान, %%b
दूसरा तर्क के मान, और %%c
शेष तर्क हैं।
जब मैं एक कमांड प्रॉम्प्ट से batch.bat USR PWD -Dargument1=1 -Dargument2=2
चलाने मैं:
command -Duser=USR -Dpwd=PWD -Dargument1=1 -Dargument2=2
echo
निकालें do
के बाद तर्क के साथ अपने आदेश कॉल करने के लिए।
स्रोत
2012-09-07 13:32:38
यह तब तक काम करता है जब तक कि पहले 2 तर्कों में से न तो उद्धृत रिक्त स्थान होते हैं। लेकिन अगर किसी तर्क में उद्धृत रिक्त स्थान होते हैं तो यह असफल हो जाएगा - शायद उपयोगकर्ता नाम या पासवर्ड के साथ कोई समस्या नहीं है, निश्चित रूप से सामान्य समाधान के रूप में स्वीकार्य नहीं है। – dbenham
@ डेबेनहम; आप सही हैं, किसी भी तरह के उद्धृत तारों को पारित करें और सभी दांव बंद हैं। –
वास्तविक रूप से उद्धृत तर्क तब तक ठीक होते हैं जब तक उद्धरण संतुलित होते हैं और तर्कों में रिक्त स्थान या विशेष वर्ण जैसे '&' '|' आदि शामिल नहीं होते हैं। अन्य संभावित समस्या - तर्कों को ',' '' '' अंतरिक्ष के बजाय '='। – dbenham