सवाल विंडोज पावरहेल में मैं दो टेक्स्ट फाइलों को कैसे अलग करूं?


मेरे पास दो टेक्स्ट फाइलें हैं और विंडोज पावरहेल का उपयोग करके उनके बीच अंतर ढूंढना चाहते हैं। क्या यूनिक्स diff उपकरण के समान कुछ उपलब्ध है? या क्या कोई और तरीका है जिस पर मैंने विचार नहीं किया है?

मैंने तुलना-वस्तु की कोशिश की है, लेकिन इस गुप्त आउटपुट को प्राप्त करें:

PS C:\> compare-object one.txt two.txt

InputObject                                                 SideIndicator
-----------                                                 -------------
two.txt                                                     =>
one.txt                                                     <=

74
2018-05-07 03:37


मूल




जवाब:


खुद को समझ लिया। चूंकि पावरहेल टेक्स्ट की बजाय .net ऑब्जेक्ट्स के साथ काम करता है, इसलिए आपको टेक्स्ट फ़ाइलों की सामग्री का पर्दाफाश करने के लिए गेट-सामग्री का उपयोग करना होगा। तो मैं जो काम करने की कोशिश कर रहा था उसे करने के लिए, इसका उपयोग करें:

compare-object (get-content one.txt) (get-content two.txt)

80
2018-05-07 03:51



मैं बहुत ही आश्चर्यचकित था जब मैंने दो फाइलों की तुलना करने की कोशिश की: संख्याओं की एक अनुरक्षित सरणी, और उन्हें क्रमबद्ध करने के बाद संख्याओं की एक ही सरणी। फाइलें बहुत अलग होने के बावजूद कोई आउटपुट नहीं है। जाहिर है, तुलना-वस्तु आदेश पर विचार नहीं करती है। - cgmb
@ सीजीएमबी - आप इसका उपयोग कर सकते हैं -SyncWindow 0 इसे ठीक करने के लिए, मेरा मानना ​​है, हालांकि मुझे यकीन नहीं है कि इसे हाल ही में पेश किया गया है। हालांकि, यह इसके बारे में विशेष रूप से स्मार्ट नहीं है। - James Ruskin


या आप डॉस का उपयोग कर सकते हैं fc ऐसा आदेश (यह दोनों फाइलों के आउटपुट को दिखाता है ताकि आपको मतभेदों को स्कैन करना पड़े):

fc.exe filea.txt fileb.txt > diff.txt

fc प्रारूप-कस्टम cmdlet के लिए उपनाम है इसलिए कमांड को दर्ज करना सुनिश्चित करें fc.exe। कृपया ध्यान दें कि कई डॉस यूटिलिटीज यूटीएफ -8 एन्कोडिंग को संभाल नहीं लेती हैं।

आप एक सीएमडी प्रक्रिया भी चला सकते हैं और चला सकते हैं fc इसके अंदर।

start cmd "/c  ""fc filea.txt fileb.txt >diff.txt"""

यह उद्धरण में पैरामीटर का उपयोग करके 'cmd' प्रोग्राम के साथ प्रक्रिया शुरू करने के लिए PowerShell को निर्देश देता है। उद्धरणों में, आदेश चलाने और समाप्त करने के लिए '/ c' cmd विकल्प है। प्रक्रिया में cmd ​​द्वारा चलाने के लिए वास्तविक आदेश है fc filea.txt fileb.txt आउटपुट को फ़ाइल में रीडायरेक्ट करना diff.txt

आप डॉस का उपयोग कर सकते हैं fc.exe शक्तिशक्ति के भीतर से।


27
2018-05-29 17:52



डॉस ^ _ ^ लाने के लिए +1 - Jeff Bridgman
"एफसी" मेरे लिए काम नहीं कर रहा था, और मुझे एहसास नहीं हुआ कि मुझे प्रारूप-कस्टम से इसे अलग करने के लिए इसे "fc.exe" के रूप में निर्दिष्ट करना था। ठीक वही जो मेरे द्वारा खोजा जा रहा था। धन्यवाद। - Xonatron
शायद मैं एक पूर्ण philistine हूँ, लेकिन यह मेरे लिए और अधिक उपयोग करने योग्य लगता है। यह मेरी समस्या को बहुत अच्छी तरह से हल किया। - AJ.


ऐसा करने का एक आसान तरीका लिखना है:

diff (cat file1) (cat file2)

23
2017-12-12 19:15



डिफ और बिल्ली पावरशेल में तुलना-ऑब्जेक्ट और गेट-कंटेंट के लिए केवल उपनाम हैं। यह एक ही बात है। - Shawn Melton
स्वीकार्य उत्तर के समान होने के बावजूद, मुझे इस वाक्यविन्यास का अधिक उपयोग करना पसंद है - Elijah W. Gagne


* निक्स पर diff शैल का हिस्सा नहीं है, लेकिन एक अलग आवेदन है।

क्या कोई कारण है कि आप PowerShell के तहत diff.exe का उपयोग नहीं कर सकते हैं?

आप UnxUtils पैकेज से एक संस्करण डाउनलोड कर सकते हैं (http://unxutils.sourceforge.net/)


7
2018-05-07 03:56



क्योंकि PowerShell अब शामिल है, डाउनलोड करने और स्थापित करने के लिए कुछ नहीं। - Bratch
मैं बस उपयोग कर समाप्त हो गया git diff, क्योंकि मैंने इसे पहले से ही स्थापित किया था। न fc.exe न Compare-Object आउटपुट का उत्पादन किया जो मुझे उम्मीद थी। - Raziel


तुलना-वस्तु (उर्फ diff उपनाम) दयनीय है अगर आप एक यूनिक्स diff की तरह कुछ व्यवहार करने की उम्मीद है। मैंने diff (gc file1) (gc file2) की कोशिश की, और यदि कोई रेखा बहुत लंबी है, तो मैं वास्तविक अंतर नहीं देख सकता और अधिक महत्वपूर्ण बात यह नहीं बता सकता कि मैं कौन सी रेखा संख्या diff चालू है।

जब मैं -स्पस्थु को जोड़ने का प्रयास करता हूं, तो अब मैं अंतर देख सकता हूं, लेकिन मैं खो देता हूं कि किस फ़ाइल में अंतर है, और मुझे अभी भी एक लाइन नंबर नहीं मिला है।

मेरी सलाह, फ़ाइलों में अंतर खोजने के लिए शक्तियों का उपयोग न करें। जैसा कि किसी और ने नोट किया है, एफसी काम करता है, और तुलना-वस्तु से थोड़ा बेहतर काम करता है, और यहां तक ​​कि बेहतर है कि वास्तविक उपकरण डाउनलोड और उपयोग कर रहे हैं जैसे यूनिक्स एमुलेटर कि माइकेज ने उल्लेख किया था।


3
2018-02-18 18:19





WinMerge एक और अच्छा जीयूआई आधारित diff उपकरण है।


2
2018-05-07 04:58



इस तरह मैंने इसे अतीत में किया था, जो एक मैन्युअल प्रक्रिया है, जिसे मैं एक छोटी लिपि से बदलना चाहता था। - Bratch


जैसा कि अन्य ने ध्यान दिया है, यदि आप यूनिक्स-वाई diff आउटपुट की अपेक्षा कर रहे थे, तो पावरहेल diff उपनाम का उपयोग करके आप कड़ी मेहनत कर सकते हैं। एक बात के लिए, आपको वास्तव में फ़ाइलों को पढ़ने (जीसी / प्राप्त सामग्री के साथ) में हाथ पकड़ना होगा। दूसरे के लिए, अंतर संकेतक सामग्री से बहुत दूर है - यह एक पठनीयता दुःस्वप्न है।

किसी भी आउटपुट की तलाश में किसी के लिए समाधान है

  1. एक असली diff प्राप्त करें (उदाहरण के लिए GnuWin32 से)
  2. % USERPROFILE% \ दस्तावेज़ \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1 संपादित करें
  3. लाइन जोड़ें

    remove-item alias:diff -force
    

बल के तर्क की आवश्यकता है क्योंकि पावरहेल इस विशेष अंतर्निर्मित उपनाम के बारे में काफी मूल्यवान है। यदि कोई दिलचस्पी लेता है, तो GnuWin32 स्थापित होने पर, मैं अपनी शक्तिशक्ति प्रोफ़ाइल में निम्नलिखित भी शामिल करता हूं:

remove-item alias:rm
remove-item alias:mv
remove-item alias:cp

मुख्य रूप से क्योंकि पावरहेल उन तर्कों को नहीं समझता जो एक साथ चलते हैं और टाइपिंग करते हैं, उदाहरण के लिए "आरएम-फ़ोर्स-रेकर्स" "आरएम-आरएफ" से बहुत अधिक प्रयास है।

पावरहेल में कुछ अच्छी विशेषताएं हैं, लेकिन कुछ चीजें हैं जो इसे मेरे लिए करने की कोशिश नहीं करनी चाहिए।


2
2018-01-28 12:54





वहाँ भी Windiff जो एक जीयूआई diff इंटरफेस प्रदान करता है (जीयूआई आधारित सीवीएस / एसवीएन कार्यक्रमों के साथ उपयोग के लिए महान)


1
2018-05-07 04:17