2008-09-13 29 views
242

Windows上で*.batスクリプトを使用して2つのバイナリファイルを結合する必要があります。Windows用catの代替品はありますか

どうすれば実現できますか?

+14

あなたのタイトルの質問とあなたの説明の質問は全く同期していません。 typeはタイトルの質問に対する最良の答えとなり、copy/bは説明の質問に対する最良の答えになります。可能であれば、そのタイトルを変更することもできます。 – Joseph

+2

@Joseph 'type'は' cat'の機能の一部のみを置き換えることができます(Windowsではバイナリファイルとテキストファイルの区別による)。 – jfs

+1

UNIX/LINUXコマンドを使用しないためにWindowsが嫌い – winklerrr

答えて

352

WindowsのtypeコマンドはUNIX catと同じように動作し、バイナリファイル用に/ Bオプションが必要になる場合があります。

例1:

cat file1 file2 > file3 

例2:

type file1 file2 > file3 

は等価である

type *.vcf > all_in_one.vcf 

このコマンドは、1つにすべてのvCardをマージします。あなたがそれを好きかのようtypeは、取得・コンテンツの別名であることを

+1

このような場合、タイプの問題は、複数のファイルを指定したときに、コマンドラインで –

+2

コマンドラインで複数のファイルを指定する場合は、ファイルの内容をコピーする前に、いくつかの空白行とファイルの名前を出力してください。それを試してください:) –

+1

ああ、私はヘッダーが標準エラーに行くことに気づいていませんでした。知っておいてよかった。 –

70

あなたはこのようなcopy /bを使用することができます。

copy /b file1+file2 destfile 
+3

ファイルのシーケンスに "copy/b file * destfile"のようなワイルドカードを使用することができます – Stalinko

3

ちょうどドスを使用するには、複数のソースファイルと1つの宛先ファイルを指定して、コマンドをコピーしてください。

コピーファイル1ファイル2 + appendedfile

あなたは

9

恥知らずPowerShellのプラグ(私は学習曲線が痛みだと思うので、そのいずれかの機会に何かを教えることは助けることができる)

Get-Content file1,file2 

注意より良い、あなたが書くことができます:あなたがあなたの仕事をやっているマシンを管理している場合は、私は非常にGnuWin32をインストールすることをお勧めし

type file1,file2 
+0

それは動作しますが、それは遅いです。私は、ファイルごとに30分かかっていた大きなビデオファイルを連結するためにpowershellを待って座っている間、この質問を見つけました。私はプロセスを抹殺し、 'type file1 file2> dest 'を使ってcmdで試してみたところ、それぞれが数秒で完了しました。 – stib

+0

[powershellはあなたのバイナリファイルを壊すかもしれません。例えば ''\ n' 'は'' \ r \ n'''と置き換えることができます(http://stackoverflow.com/a/33959798/4279) – jfs

20

。 "Download All"だけを実行し、wgetプログラムにすべてのパッケージを取得させます。 cat、grep、find、gzip、tar、less、および何百もの他のものにアクセスできます。

GnuWin32は、新しいWindowsボックスにインストールする最初のものの1つです。

+0

私はお勧めしますGetGnuWin32(インストールを簡素化するため) – jfs

+3

外部ユーティリティを使用することができれば、〜30 Unixユーティリティを組み込んだ単一〜600 kBのexeであるWindows用のbusyboxが好きです。唯一の違いは、単純な "cat"コマンドの代わりに "busybox cat"コマンドを使うべきことです。 – Fr0sT

1

単に既存のファイルの最後にテキストを追加する場合は、>>パイプを使用できます。例:あなたはバッチスクリプトを使用して、ここにインストールのpythonを持っている必要があります場合は

echo new text >>existingFile.txt 
0

は、バッチやPythonでpolygot答えです:join.bat用法として保存した場合

1>2# :^
''' 
@echo off 
python "%~nx0" " %~nx1" "%~nx2" "%~nx3" 
exit /b 
rem^
''' 
import sys 
import os 

sys.argv = [argv.strip() for argv in sys.argv] 
if len(sys.argv) != 4: 
    sys.exit(1) 

_, file_one, file_two, out_file = sys.argv 

for file_name in [file_one, file_two]: 
    if not os.path.isfile(file_name): 
     print "Can't find: {0}".format(file_name) 
     sys.exit(1) 

if os.path.isfile(out_file): 
    print "Output file exists and will be overwritten" 

with open(out_file, "wb") as out: 
    with open(file_one, "rb") as f1: 
     out.write(f1.read()) 

    with open(file_two, "rb") as f2: 
     out.write(f2.read()) 

は次のようになります。

join.bat file_one.bin file_two.bin out_file.bin 

感謝の気持ちもthis answerありがとうございます。

2

Windows 10のRedstone 1リリースでは、WindowsはNTOSカーネル用の実際のLinuxサブシステムを追加しました。私はもともと、Androidアプリやドッカータイプのシナリオをサポートすることを意図していたと思う。MicrosoftはCanonicalと提携し、実際のネイティブbashシェルを追加しました。また、aptパッケージマネージャを使って多くのUbuntuパッケージを入手することができます。たとえば、apt-get gccを実行して、Linuxボックスと同じようにGCCツールチェーンをインストールすることができます。

私が大学にいたときにこのようなことが起こっていたら、ネイティブのWindows bashシェルで自分のUnixプログラミングの割り当てのほとんどをやっていたと思います。

関連する問題