वर्तमान में मैं एक फ़ाइल में आउटपुट परिणामों के लिए तुलना स्क्रिप्ट से परे का उपयोग कर सकता हूं। आप सभी पॉवर्सशेल के माध्यम से परिणाम टेक्स्ट फ़ाइल में अंतर की जांच करने का तरीका जानने में मेरी मदद करने में सक्षम थे। हालाँकि, मेरे पास एक और सवाल है। परिणामों को टेक्स्ट फ़ाइल में प्राप्त करने के लिए, तुलना से परे क्या आपने मूल स्क्रिप्ट का उपयोग किया है और फिर स्क्रिप्ट को cmd के माध्यम से चलाया है। मेरा प्रश्न यह है कि मैं cmd ​​के बजाय Powershell के माध्यम से स्क्रिप्ट कैसे चलाऊं? नीचे स्क्रिप्ट चलाने के लिए cmd में प्रयुक्त कमांड है।

c:\Program Files\Beyond Compare 4>bcompare.exe @"C:\script.txt" "C:\test1" "C:\test" "C:\bcreport\report.txt"

जिस स्क्रिप्ट का यह संदर्भ दे रहा है वह नीचे है।

load "%1" "%2"
expand all
folder-report layout:side-by-side options:display-mismatches output-to:"%3"

किसी भी इनपुट के लिए धन्यवाद। इसे काम पर लाना एक बहुत बड़ी पॉवर्सशेल स्क्रिप्ट का हिस्सा है जिस पर मैं काम कर रहा हूँ। अगर मैं इसे पॉवर्सशेल से चलाने के लिए प्राप्त कर सकता हूं, तो यह मुझे एक टन समय बचाएगा क्योंकि मैं कुछ ऐसा स्क्रिप्ट करने में सक्षम हो जाऊंगा जिसमें घंटों लगेंगे।

4
user9641416 25 मार्च 2020, 18:19

2 जवाब

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

cmd के विपरीत, एक गैर-उद्धृत @ पावरशेल में एक मेटाकैरेक्टर है; यानी इसका विशेष अर्थ होता है[1]

इस मामले में @ शब्दशः का उपयोग करने के लिए, इसे bcompare.exe तक पहुंचाने के लिए, इसे ` से हटा दें, जो कि है पावरशेल का एस्केप कैरेक्टर; यानी, `@ का उपयोग करें:

bcompare.exe `@"C:\script.txt" "C:\test1" "C:\test" "C:\bcreport\report.txt"

वैकल्पिक रूप से, उद्धृत स्ट्रिंग में @ को शामिल करें:

bcompare.exe "@C:\script.txt" "C:\test1" "C:\test" "C:\bcreport\report.txt"

एक अन्य विकल्प --%, तथाकथित स्टॉप-पार्सिंग प्रतीक को तर्कों से पहले रखना है, जैसा कि वासिफ हसन का जवाब; ऐसा करने से PowerShell तर्कों को आगे बढ़ाने से पहले उनकी व्याख्या करने से रोकता है।
हालांकि, ध्यान दें कि हालांकि यह अपेक्षित रूप से काम करता है यदि आपके सभी तर्क शाब्दिक हैं, जैसा कि आपके मामले में है, सामान्य तौर पर यह आपको PowerShell चर और अभिव्यक्तियाँ / के रूप में तर्कों में, और अन्य अप्रत्याशित दुष्प्रभाव हो सकते हैं - देखें यह जवाब.


[1]

  • @ पावरशेल में एकाधिक वाक्य-विन्यास के उद्देश्यों को पूरा करता है; " के साथ @ के बाद, PowerShell को लगता है कि तर्क एक यहां-स्ट्रिंग; चूंकि यहां-स्ट्रिंग को बहु-पंक्ति परिभाषा की आवश्यकता होती है, इसलिए सिंटैक्स त्रुटि के कारण कमांड टूट जाता है। @ चर नाम से पहले (उदाहरण के लिए, @foo) स्प्लैटिंग
  • यह उत्तर cmd के मेटाएक्टैक्टर और पावरशेल के विपरीत है।
  • इस उत्तर में इस बात का व्यापक अवलोकन है कि कैसे पावरशेल गैर-उद्धृत कमांड तर्कों को पार्स करता है।
4
mklement0 3 फरवरी 2021, 23:27

या --%, स्टॉप का इस्तेमाल करें -पार्सिंग प्रतीक, यदि आप पॉवरशेल v3+ का उपयोग कर रहे हैं:

bcompare.exe --% @"C:\script.txt" "C:\test1" "C:\test" "C:\bcreport\report.txt"

या @mklement0 . द्वारा दिखाए गए समाधान का उपयोग करें

1
mklement0 25 मार्च 2020, 19:10