2010-08-05 21 views
34

Düzenli olarak tek bir dosyada birleştirmem gereken bir dizinde 50 ila 60 dosyam var.Bir dizinde çok sayıda dosyayı birleştirmeniz gerekiyor

Notepad ++ kullanmayı düşündüm, ancak muhtemelen bir eklenti bulunabileceğini düşündüğüm bir eklenti olduğunu düşünmüştüm.

Başka düşünceleriniz var mı?

+0

Windows veya Linux işletim sistemi kullanıyor musunuz: –

+0

Bu soruyu kapatmak istemiyorsanız, "Programlanmış bir aralıkta dosyaları birleştirmek için nasıl program yazabilirim" sorusunu daha iyi düzenleyebilirsiniz. Bunu yapmak için küçük bir uygulama yazmanıza yardımcı olabiliriz (batch, vb script, .net, vs) ... ama herhangi bir tavsiyede bulunmak istiyorsanız, http://superuser.com adresine sorunuzu taşımanıza gerek vardır. işi sizin için yapmak için üçüncü taraf uygulamaları kullanarak. –

+0

Dosyaları okunabilir bir dosyaya mı yoksa yalnızca arşivleme amacıyla mı birleştiriyorsunuz? Kişisel olarak, daha fazla taşıma ve uzun süreli depolama için çok sayıda JPG görüntüyü sıkıştırma olmadan tek bir ZIP dosyasına birleştiriyorum. Fakat ne tür dosyalar, hangi işletim sistemini belirtmeniz ve programlama yardımına ihtiyacınız varsa daha fazla ayrıntı vermeniz gerekir. – JYelton

cevap

70

Bunların metin dosyaları olduğunu (notepad ++ kullandığınızdan beri) olduğunu ve Windows üzerindeyseniz, bunları birleştirmek için basit bir toplu komut dosyası hazırlayabilirsiniz.

Örneğin, tüm metin dosyaları ile dizinde aşağıdaki yürütün:

for %f in (*.txt) do type "%f" >> combined.txt 

Bu, tüm dosyaları eşleşen birleştirir * .txt combined.txt denilen bir dosya içine. Daha fazla bilgi için

: adlı bir elverişli bir üçüncü taraf aracı yoktur bu

$sb = new-object System.Text.StringBuilder 

foreach ($file in Get-ChildItem -path 'C:\temp\xx\') { 
    $content = Get-Content -Path $file.fullname 
    $sb.Append($content) 
} 
Out-File -FilePath 'C:\temp\xx\c.txt' -InputObject $sb.toString() 
+0

Not: Büyük ya da çok sayıda dosya için bunu yapamayacağımı unutmayın. – JYelton

+1

Çok sayıda BOM (bayt sırası işareti), combiled dosyasına eklendiğinde (büyük olasılıkla yapmazsınız) harikadır. – Darragh

+0

Bu, birleştirilen dosyaların niteliğine ve kodlamasına bağlıdır. BOM'lar, UTF8'de isteğe bağlıdır ve bazı Windows uygulamaları bu üç baytın bir dosyanın başlangıcına eklenmesiyle ünlü olsa da, Windows 7 Not Defteri gibi değildir. Ancak eğer mevcutlarsa ve bir soruna neden oluyorlarsa, burada bir yazışma var: http://www.heikniemi.net/hardcoded/2009/12/utf-8-preamble-is-a-problem-when-you-concatenate- files/ – JYelton

59

Windows 'copy' komutunu kullanın. senin durumunda

Yani
C:\Users\dan>help copy 
    Copies one or more files to another location. 

    COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B] 
     [+ source [/A | /B] [+ ...]] [destination [/A | /B]] 

     source  Specifies the file or files to be copied. 
     /A   Indicates an ASCII text file. 
     /B   Indicates a binary file. 
     /D   Allow the destination file to be created decrypted 
     destination Specifies the directory and/or filename for the new file(s). 
     /V   Verifies that new files are written correctly. 
     /N   Uses short filename, if available, when copying a file with 
        a non-8dot3 name. 
     /Y   Suppresses prompting to confirm you want to overwrite an 
        existing destination file. 
     /-Y   Causes prompting to confirm you want to overwrite an 
        existing destination file. 
     /Z   Copies networked files in restartable mode. 
     /L   If the source is a symbolic link, copy the link to the 
        target 
        instead of the actual file the source link points to. 

    The switch /Y may be preset in the COPYCMD environment variable. 
    This may be overridden with /-Y on the command line. Default is 
    to prompt on overwrites unless COPY command is being executed from 
    within a batch script. 

    **To append files, specify a single file for destination, but 
    multiple files for source (using wildcards or file1+file2+file3 
    format).** 

:

copy *.txt destination.txt

soran destination.txt içine

Teşekkür alfabetik tüm .txt dosyaları birleştirir Will, yeni bir şeyler öğrendim!

+2

Bir PowerShell betiğine gerek yok. Yeni bir şey öğrendim. Teşekkürler. –

+3

Ayrıca, bu yardım açıklamasına göre siparişi de belirtebilirsiniz: copy file1.txt + file2.txt + file3.txt destination.txt – dwerner

+1

bu (aynı cevap ?!) (aynı zamanda) kasap örn. utf8 birçok karakter için kabul edilemez ANSI yerine kodlama. –

1

FileMenu Tools, o birkaç sağ tıklayın verir windows explorer uzantısı olarak araçlar. Bunlardan

biri yapar ve aradığınız tam olarak ne undoes/Parçaları ÜyelikBölünmüş dosyasıdır.

http://www.lopesoft.com/en/filemenutools numaralı telefondan kontrol edin. Elbette, sadece Windows, Unixes ortamlarının zaten bunun için çok fazla aleti var. Dosyaların başka türde varsa

+0

Benim için işe yaramadı, bu gibi bir şeye değiştirmek zorunda kaldım (her dosyadan sonra yeni satır eklendi): 'foreach (Get-ChildItem -yolu'ndaki $ dosya 'C: \ temp \ EXEMPLES_TEST') { $ content = Get -Content -Path $ file.fullname $ content = $ content + [Ortam] :: NewLine $ içerik | Dosya Dışında 'C: \ temp \ EXEMPLES_TEST \ bileşik.txt' -append } ' –

11
copy *.txt all.txt 

Bu

copy *.sql all.sql 
+2

Bu, kasap, ör. utf8 birçok karakter için kabul edilemez ANSI yerine kodlama. –

0

bu olduğunu biliyorum sql dosyaları gibi

all.txt bir metin dosyasına klasörün tüm metin dosyaları sıralamak olacak Eski bir yazı, ama onu buldum ve sonra Total Mail Converter öneren birini buldum. Klasörümü 2k .msg dosyalarıyla .txt dosyasına dönüştürebiliyordum. Ayrıca PDF ve diğer popüler formatlara dönüştürmenize de izin verir.

Birisi bana birkaç gün kazandıracağı için önerildiğine sevindiğim harika bir araçtır.

FYI - Projemi birleştiriyor.msg dosyalarını tek bir metin dosyasına böylelikle dosyadan belirli bilgileri çıkarmak için bir betik çalıştırabilirim (örn: e-posta ve linkler). 2k dosyaları yerine, bir tane ile çalışabilirim.

0

Pencerelerde toplu iş dosyasında basit bir komut kullanıyorum ve tüm bilgileri yalnızca tek bir dosyada tutmak için Zamanlanmış Görev kullanıyorum. Sonuç dosyasına başka bir yol seçtiğinizden emin olun, yoksa yinelenen verilere sahip olacaksınız.

tip PathToOriginalFiles \ *. Uzatma > AnotherPathToResultFile \ NameOfTheResultFile.Extension

Eğer CSV dosyaları çok katılmak gerekiyorsa, yapmak için iyi bir şey ile tek dosyada başlığa sahip olmaktır 0header.csv ya da başka bir ad gibi ad, her zaman listede ilk dosya olacak ve diğer tüm csv dosyalarını bir başlık içermeyen programlandığından emin olun. Eğer ++ Notepad açık dosyalar için bunu yapmak isterseniz

4

Evet, bir eklenti notepad ++ için "birleştirmek" adlı kullanılabilir Linki:. >>Combine Plugin for Notepad++

Eklenti yöneticisi ile kurabilirsiniz. Bu eklentinin ekstra faydası şöyledir: "Birleştirme sırasında dosya sırasını koruyabilirsiniz, açılan dosyaların sırasına göre açılır (bakınız sekmeler)".

ForEach ($f in get-ChildItem *.sql) { type "$f" >> all.sql } 
0

Ben pencereler powershell bu senaryoyu kullanılan? Windows ise, PowerShell'iniz var mı?
İlgili konular