Windowsで猫の代わりはありますか


309

*.batWindowsのスクリプトで2つのバイナリファイルを結合する必要があります。

どうすればそれを達成できますか?


15
タイトルの質問と説明の質問が完全に同期していません。typeはタイトルの質問の最良の回答であり、copy / bは説明の質問の最良の回答です。可能であれば、そのタイトルを変更することもできます。
ジョセフ

2
@Joseph typecatの機能の一部のみを置き換えることができます(Windowsではバイナリファイルとテキストファイルが区別されているため)。
jfs 2008

回答:


452

Windows typeコマンドはUNIXと同様に機能しますcat

例1:

type file1 file2 > file3

同等です:

cat file1 file2 > file3

例2:

type  *.vcf > all_in_one.vcf  

このコマンドは、すべてのvcardを1つにマージします。


1
この状況でのタイプの問題は、コマンドラインで指定された複数のファイルを入力すると、不要なファイルヘッダーが追加されることです。
グレッグヒューギル

2
コマンドラインで複数のファイルを指定する場合、typeは、ファイルの内容をコピーする前に、数行の空白行とファイル名を出力します。試してみてください:)
グレッグヒューギル

3
ああ、ヘッダーがstderrに送られることに気づかなかった。知っておくと良い。
グレッグヒューギル

1
矢印付きのタイプ(上記)は、少なくともXPでは、大きなファイル(> 2 GBまたは4など)では機能しないことに注意してください。ただし、「コピー」コマンドを使用できます(他の回答を参照)。
rogerdpack 2010年

2
他のヒント:他の出力を表示しないようにするtype file1 file2 > file3 2>NUL
Mike T

85

次のcopy /bように使用できます:

copy /b file1+file2 destfile

5
ファイルのシーケンスには、「copy / b file * destfile」のようなワイルドカードを使用できます
Stalinko

受け入れられた回答に関するtypeコメントで概説されている明らかな問題を考えると、これは受け入れられた回答ではないことを私には奇妙です...
Jony Thrive

23

作業を行っているマシンを制御できる場合は、GnuWin32をインストールすることを強くお勧めします。「すべてダウンロード」して、wgetプログラムにすべてのパッケージを取得させます。その後、cat、grep、find、gzip、tar、less、その他数百にアクセスできます。

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


私は(簡素化インストールに)GetGnuWin32をお勧めします
JFS

3
外部ユーティリティの使用が許容できる場合、私はWindows用のbusyboxを好むでしょう。唯一の違いは、単純な「cat」の代わりに「busybox cat」コマンドを使用する必要があることです
Fr0sT

12

恥知らずなPowerShellプラグイン(学習曲線が面倒なので、いつでも何かを教えることが役立つので)

Get-Content file1,file2

ノートtypeには、Get-コンテンツの別名である、あなたはより良いそれを好めばそう、あなたが書くことができます。

type file1,file2

1
それは機能しますが、犬は遅いです。powershellがファイルごとに30分かかるいくつかの大きなビデオファイルを連結するのを待っている間にこの質問を見つけました。プロセスを強制終了しtype file1 file2 > dest、cmdを使用してそれを試したところ、各プロセスは数秒で完了しました。
stib 2015年


何らかの理由で、ファイルがUTF-16に変換されました。-Encoding UTF8何も変更しませんでした。
John Dvorak

5

複数のソースファイルと1つの宛先ファイルでdos copyコマンドを使用するだけです。

copy file1+file2 appendedfile

バイナリファイルには/ Bオプションが必要になる場合があります


2

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

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


1

既存のファイルの末尾にテキストを追加するだけの場合は、>>パイプを使用できます。例:

echo new text >>existingFile.txt

0

バッチスクリプトを使用する必要があり、ここにpythonがインストールされている場合は、バッチとpythonでのポリゴットの回答です。

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として保存すると、次のようになります。

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

インスピレーションを与えてくれたこの回答にも感謝します。


0

Linuxサーバーで分割されたtarアーカイブを再結合しようとします。

そして、私がtypeWindowsで使用cmd.exeすると、ファイルが間違った順序で結合される原因になります(つまりtype、最初にXXXX.ad、次にXXXX.ac、XXXX.aaなどが配置されることがあります)。

そこで、batGitHub https://github.com/sharkdp/batに、Windowsビルドがあり、コードの強調表示が改善されたツールが見つかりました。重要なことは、Windowsで正常に動作してtarアーカイブに再結合することです。


0

だから私はEOL文字を保持するためのアビリティーで同様の解決策を探していて、方法がないことを発見したので、私は自分の最善を尽くして自分のユーティリティを作りましたこれはWindows用のネイティブの猫の実行ファイルです-https :// mega。 nz /#!6AVgwQhL!qJ1sxx-tLtpBkPIUx__iQDGKAIfmb21GHLFerhNoaWk

Usage: cat file1 file2 file3 file4 -o output.txt
-o | Specifies the next arg is the output, we must use this rather than ">>" to preserve the line endings

私はそれをC#で構築されているので、sharp-catと呼んでいます。アンチウイルスで自由にスキャンしてください。ソースコードはリクエストに応じて提供されます。


-1

Windowsのtypeコマンドには問題があります。たとえば、512バイトの境界にUnicode文字が含まれています。Cygwinの猫を試してみてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.