Soru Windows Powershell'de iki metin dosyasını nasıl dağıtabilirim?


İki metin dosyam var ve Windows Powershell kullanarak aralarındaki farkları bulmak istiyorum. Mevcut Unix dif aracına benzer bir şey var mı? Yoksa başka bir şekilde düşünmedim mi?

Karşılaştırma nesnesini denedim, ancak bu şifreli çıktıyı aldım:

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

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

75
2018-05-07 03:37


Menşei




Cevaplar:


Kendimi anladım. Powershell, metin yerine .net nesneleriyle çalıştığından, metin dosyalarının içeriğini göstermek için get-content kullanmanız gerekir. Yani, soruda yapmaya çalıştığım şeyi gerçekleştirmek için şunu kullanın:

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

81
2018-05-07 03:51



İki dosyayı karşılaştırmaya çalıştığımda çok şaşırdım: sıralanmamış bir sayı dizisi ve onları sıraladıktan sonra aynı sayı dizisi. Dosyaların çok farklı olmasına rağmen çıkış yok. Görünüşte, karşılaştırma nesnesi düzeni düşünmüyor. - cgmb
@cgmb - kullanabilirsiniz -SyncWindow 0 Bunu düzeltmek için, inanıyorum ki, yakın zamanda piyasaya sürüldüğünden emin değilim. Bununla ilgili özellikle akıllı değil. - James Ruskin


Ya da DOS'u kullanabilirsin fc komut gibi (Bu, her iki dosyanın çıkışını gösterir, böylece farkları taramanız gerekir):

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

fc Format-Custom cmdlet'inin bir takma adıdır. fc.exe. Lütfen birçok DOS programının UTF-8 kodlamasını işlemediğini unutmayın.

Ayrıca bir CMD süreci oluşturabilir ve çalıştırabilirsiniz fc onun içinde.

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

Bu, PowerShell'e, tırnak içindeki parametreleri kullanarak 'cmd' programıyla bir işlem başlatmasını bildirir. Tırnaklarda, komutu çalıştırmak ve sonlandırmak için '/ c' cmd seçeneğidir. Süreçte cmd tarafından çalıştırılacak asıl komut fc filea.txt fileb.txt çıkışı dosyaya yönlendirmek diff.txt.

DOS kullanabilirsin fc.exe powershell içinden.


28
2018-05-29 17:52



DOS ^ _ ^ öğesini getirmek için +1 - Jeff Bridgman
"fc" benim için çalışmıyordu ve bunu Format-Custom'dan ayırt etmek için "fc.exe" olarak belirtmem gerektiğinin farkında değildim. Tam olarak aradığım şey. Teşekkürler. - Xonatron
Belki ben tam bir filistin, ama bu benim için çok daha kullanışlı görünüyor. Sorunumu çok güzel çözdü. - AJ.


Bunu yapmanın daha basit bir yolu yazmaktır:

diff (cat file1) (cat file2)

24
2017-12-12 19:15



Diff ve cat, PowerShell'de Compare-Object ve Get-Content için sadece takma adlardır. Aynı şey. - Shawn Melton
Bu kabul edilen cevapla aynı olmasına rağmen, bu sözdizimini kullanmayı seviyorum - Elijah W. Gagne


diff on * nix, kabuğun bir parçası değil, ayrı bir uygulamadır.

PowerShell altında sadece diff.exe kullanamazsınız herhangi bir sebep var mı?

UnxUtils paketinden bir versiyon indirebilirsiniz (http://unxutils.sourceforge.net/)


7
2018-05-07 03:56



PowerShell artık eklendiğinden, indirilecek ve yüklenecek bir şey yok. - Bratch
Ben sadece kullanarak bitti git diffÇünkü zaten kurdum. ne fc.exe ne de Compare-Object Beklediğim çıktıyı üretti. - Raziel


Karşılaştırma nesnesi (aka diff alias), unix diff gibi bir şey yapmasını beklerseniz, acıklıdır. Diff (gc file1) (gc file2) denedim ve eğer bir çizgi çok uzunsa, asıl farkı göremiyorum ve daha da önemlisi, farkın hangi satırda olduğunu anlayamıyorum.

-Passthru eklemeye çalıştığımda, şimdi farkı görebiliyorum, ama farkın hangi dosyada olduğunu kaybediyorum ve hala bir satır numarası alamıyorum.

Tavsiyem, dosyalardaki farklılıkları bulmak için powershell kullanmayın. Birisi daha önce de belirttiği gibi, fc çalışır ve karşılaştırma nesnesinden biraz daha iyi çalışır, ve daha da iyisi Mikeage'ın bahsettiği unix emülatörü gibi gerçek araçları indirip kullanmaktır.


3
2018-02-18 18:19





WinMerge başka bir iyi GUI tabanlı fark aracıdır.


2
2018-05-07 04:58



Geçmişte yaptığım, manuel bir işlem olan, küçük bir betikle değiştirmek istediğim buydu. - Bratch


Diğerlerinin de belirttiği gibi, bir unix-y diff çıkışını bekliyor olsaydınız, powershell diff takma adının kullanılması sizi zorlamanıza izin verirdi. Bir şey için, aslında dosyaları okumada (gc / get-content ile) elini tutmalısınız. Bir diğeri için, fark göstergesi, içerikten uzak, sağda - okunabilirlik kabusu.

Aklı çıktı arayan herkes için çözüm

  1. gerçek bir fark elde edin (örn. GnuWin32'den)
  2. % USERPROFILE% \ Documents \ WindowsPowerShell \ Microsoft.PowerShell_profile.ps1 dosyasını düzenleyin
  3. satırı ekle

    remove-item alias:diff -force
    

Kuvvet argümanı gereklidir çünkü Powershell bu özel yapım takma adlar konusunda oldukça değerlidir. GnuWin32 yüklü olmasıyla ilgilenen biri varsa, powershell profilimde de aşağıdakileri içerir:

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

Esasen, Powershell birlikte ve yazılan argümanları anlayamadığı için, örneğin "rm -Force -Recurse", "rm -rf" den çok daha fazla çabadır.

Powershell'in bazı güzel özellikleri var, ama benim için yapmaya çalışmadığı bazı şeyler var.


2
2018-01-28 12:54