2012-09-01 15 views
5

मैं एक बैच स्क्रिप्ट तर्क (फ़ाइलों की सूची) के किसी भी संख्या लेता है करने के लिए बैच स्क्रिप्ट से% * गुजर और कार्यान्वित एक powershell स्क्रिप्ट:

"%POWERSHELL%" -Command "%SCRIPT%" %*

%POWERSHELL%PowerShell.exe के लिए पथ है, और %SCRIPT% मेरी powershell स्क्रिप्ट की व्याख्या प्राप्त करता है कि %*$args के रूप में है। समस्या यह है कि अगर मैं फ़ाइल नाम test$file.name जैसे कुछ पास करता हूं, तो PowerShell test.name प्राप्त करता है, संभवतः $file को एक खाली चर के रूप में व्याख्या किया जाता है।

क्या बैच स्क्रिप्ट से सिंगल कोट्स या बैकटिक्स के साथ प्रत्येक तर्क से बचने का कोई अच्छा तरीका है, या अन्यथा इससे निपटें?

उत्तर

5

PowerShell स्क्रिप्ट में% * पास करने से पहले $ वर्णों से बचें।

set ARGS=%* 
set ARGS=%ARGS:$=`$% 
"%POWERSHELL%" -Command "%SCRIPT%" %ARGS% 
+0

एक आकर्षण की तरह काम करता है - मुझे उस कॉलन नोटेशन के बारे में कोई जानकारी नहीं थी! –

+0

गाजर '^' भी काम करेगा? या बाएं उद्धरण शक्तियों में एक विशेष चरित्र है? –

+2

@ hayk.mart: '% VAR: S1 = S2%' चर में तारों को प्रतिस्थापित करता है, अधिक जानकारी के लिए 'सहायता सेट' देखें। –