Existe-t-il un remplacement pour chat sous Windows

309

J'ai besoin de joindre deux fichiers binaires avec un *.batscript sous Windows.

Comment puis-je y parvenir?

Artem Tikhomirov
la source
15
Votre question de titre et votre question de description ne sont pas totalement synchronisées. type serait la meilleure réponse pour la question du titre et copy / b serait la meilleure réponse pour la question de description. Vous voudrez peut-être modifier ce titre si possible.
Joseph
2
@Joseph typene peut remplacer qu'une partie des catfonctionnalités de (en raison de la distinction entre les fichiers binaires et les fichiers texte sous Windows).
jfs
Cross-duplicate: superuser.com/q/434870/52365
GSerg

Réponses:

452

La typecommande Windows fonctionne de manière similaire à UNIX cat.

Exemple 1:

type file1 file2 > file3

est équivalent à:

cat file1 file2 > file3

Exemple 2:

type  *.vcf > all_in_one.vcf  

Cette commande fusionnera toutes les vcards en une seule.

Nathan Jones
la source
1
Le problème avec le type dans cette situation est qu'il ajoute des en-têtes de fichiers indésirables lors de la frappe de plusieurs fichiers spécifiés sur la ligne de commande.
Greg Hewgill,
2
Lorsque vous spécifiez plusieurs fichiers sur la ligne de commande, tapez affiche quelques lignes vides et le nom du fichier, avant de copier le contenu du fichier. Essayez-le :)
Greg Hewgill
3
Ah, je n'avais pas remarqué que les en-têtes vont à stderr. Bon à savoir.
Greg Hewgill
1
notez que le type avec la flèche (comme ci-dessus) ne fonctionne pas avec les gros fichiers (comme> 2 Go ou 4), au moins avec XP. Vous pouvez cependant utiliser la commande "copier" (voir autre réponse).
rogerdpack
2
Une autre astuce: pour éviter d'afficher toute autre sortietype file1 file2 > file3 2>NUL
Mike T
85

Vous pouvez utiliser copy /bcomme ceci:

copy /b file1+file2 destfile
Greg Hewgill
la source
5
pour une séquence de fichiers, vous pouvez utiliser des caractères génériques comme "copie / fichier b * destfile"
Stalinko
étrange pour moi que ce ne soit pas la réponse acceptée, étant donné les problèmes apparents typedécrits dans les commentaires sur la réponse acceptée ... à moins que cette solution n'ait des inconvénients similaires mais ne soit pas assez populaire pour que les gens les notent!
Jony Thrive le
23

Si vous avez le contrôle de la machine sur laquelle vous travaillez, je vous recommande fortement d'installer GnuWin32 . Il suffit de "Télécharger tout" et de laisser le programme wget récupérer tous les packages. Vous aurez alors accès à cat, grep, find, gzip, tar, less et des centaines d'autres.

GnuWin32 est l'une des premières choses que j'installe sur une nouvelle boîte Windows.

David Citron
la source
Je recommanderais GetGnuWin32 (pour simplifier l'installation)
jfs
3
Si l'utilisation d'un utilitaire externe est acceptable, je préférerais la busybox pour Windows, qui est un exe unique de ~ 600 Ko incorporant ~ 30 utilitaires Unix. La seule différence est que l'on devrait utiliser la commande "busybox cat" au lieu du simple "cat"
Fr0sT
12

Prise PowerShell sans vergogne (parce que je pense que la courbe d'apprentissage est pénible, donc enseigner quelque chose à n'importe quelle occasion peut aider)

Get-Content file1,file2

Notez qu'il types'agit d'un alias pour Get-Content, donc si vous l'aimez mieux, vous pouvez écrire:

type file1,file2
Jay Bazuzi
la source
1
Cela fonctionne, mais c'est un chien lent. J'ai trouvé cette question en étant assis en attendant que PowerShell concatène certains gros fichiers vidéo, ce qui prenait une demi-heure par fichier. J'ai tué le processus et l'ai essayé avec cmd en utilisant type file1 file2 > destet chacun a été fait en quelques secondes.
stib
Il a converti mes fichiers en UTF-16, pour une raison quelconque. -Encoding UTF8n'a rien changé.
John Dvorak
5

Utilisez simplement la commande dos copy avec plusieurs fichiers source et un fichier de destination.

copy file1+file2 appendedfile

Vous pourriez avoir besoin de l'option / B pour les fichiers binaires

Simon
la source
2

Dans la version Redstone 1 de Windows 10, Windows a ajouté un véritable sous-système Linux pour le noyau NTOS. Je pense qu'à l'origine, il était destiné à prendre en charge les applications Android, et peut-être des scénarios de type docker. Microsoft s'est associé à Canonical et a ajouté un véritable shell bash natif. En outre, vous pouvez utiliser le gestionnaire de packages apt pour obtenir de nombreux packages Ubuntu. Par exemple, vous pouvez faire apt-get gcc pour installer la chaîne d'outils GCC comme vous le feriez sur une boîte Linux.

Si une telle chose existait pendant que j'étais à l'université, je pense que j'aurais pu faire la plupart de mes affectations de programmation Unix dans le shell bash natif de Windows.

sam msft
la source
1

Si vous souhaitez simplement ajouter du texte à la fin du fichier existant, vous pouvez utiliser le >> pipe. ex:

echo new text >>existingFile.txt
Jahmic
la source
0

Si vous devez utiliser un script batch et que python est installé, voici une réponse polygot en batch et 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())

Si enregistré sous join.bat, l'utilisation serait:

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

Merci aussi cette réponse pour l'inspiration.

Noelkd
la source
0

J'essaie de rejoindre l'archive tar qui a été divisée sur un serveur Linux.

Et j'ai trouvé que si j'utilise typedans Windows cmd.exe, cela entraînera la typejonction du fichier dans le mauvais ordre (c'est-à-dire que parfois mettra d'abord XXXX.ad puis XXXX.ac, XXXX.aa etc ...)

J'ai donc trouvé un outil nommé batdans GitHub https://github.com/sharkdp/bat qui a une construction Windows, et a une meilleure mise en évidence du code et l'important est que cela fonctionne bien sur Windows pour rejoindre l'archive tar!

Aaron Xu
la source
0

Je cherchais donc une solution similaire avec la capacité de préserver les caractères EOL et j'ai découvert qu'il n'y avait aucun moyen, donc je fais ce que je fais de mieux et j'ai créé ma propre utilité.Il s'agit d'un exécutable de chat natif pour Windows - https: // méga. 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

Je l'appelle Sharp-Cat car il est construit avec C #, n'hésitez pas à scanner avec un antivirus et le code source sera disponible sur demande

Ricky Divjakovski
la source
-1

La commande de type Windows a des problèmes, par exemple avec des caractères Unicode sur une limite de 512 octets. Essayez le chat de Cygwin.

user42391
la source