Existe substituto para cat no Windows
-
09-06-2019 - |
Pergunta
Eu preciso juntar dois arquivos binários com um *.bat
script no Windows.
Como posso conseguir isso?
Solução
janelas type
comando funciona de forma semelhante ao UNIX cat
.
Exemplo 1:
type file1 file2 > file3
é equivalente a:
cat file1 file2 > file3
Exemplo 2:
type *.vcf > all_in_one.vcf
Este comando irá mesclar todos os vcards em um.
Outras dicas
Você pode usar copy /b
assim:
copy /b file1+file2 destfile
Se você tem controle sobre a máquina onde está fazendo seu trabalho, recomendo instalar GnuWin32.Basta "Baixar tudo" e deixar o programa wget recuperar todos os pacotes.Você terá então acesso a cat, grep, find, gzip, tar, less e centenas de outros.
GnuWin32 é uma das primeiras coisas que instalo em uma nova caixa do Windows.
Plugue PowerShell desavergonhado (porque acho que a curva de aprendizado é uma dor, então ensinar algo em qualquer oportunidade pode ajudar)
Get-Content file1,file2
Observe que type
é um alias para Get-Content, então se preferir, você pode escrever:
type file1,file2
Basta usar o comando dos copy com vários arquivos de origem e um arquivo de destino.
copiar arquivo1+arquivo2 arquivo anexado
Você pode precisar da opção /B para arquivos binários
Na versão Redstone 1 do Windows 10, o Windows adicionou um subsistema Linux real para o kernel NTOS.Acho que originalmente o objetivo era oferecer suporte a aplicativos Android e talvez a cenários do tipo docker.A Microsoft fez parceria com a Canonical e adicionou um shell bash nativo real.Além disso, você pode usar o gerenciador de pacotes apt para obter muitos pacotes do Ubuntu.Por exemplo, você pode fazer apt-get gcc para instalar a cadeia de ferramentas GCC como faria em uma máquina Linux.
Se tal coisa existisse enquanto eu estava na universidade, acho que poderia ter feito a maioria das minhas tarefas de programação Unix no shell bash nativo do Windows.
Se você deseja simplesmente acrescentar texto ao final do arquivo existente, você pode usar o canal >>.ex:
echo new text >>existingFile.txt
Se você precisar usar um script em lote e tiver o python instalado, aqui está um poligota responda em lote e 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())
Se salvo como join.bat, o uso seria:
join.bat file_one.bin file_two.bin out_file.bin
Obrigado também esta resposta pela inspiração.
Tento juntar novamente o arquivo tar que foi dividido em um servidor Linux.
E descobri que se eu usar type
no Windows cmd.exe
, isso fará com que o arquivo seja unido na ordem errada (ou seja, type
às vezes coloca XXXX.ad primeiro e depois XXXX.ac , XXXX.aa etc ...)
Então, encontrei uma ferramenta chamada bat
no GitHub https://github.com/sharkdp/bat que tem uma versão para Windows e tem melhor destaque de código e o importante é que funciona bem no Windows para reingressar no arquivo tar!
Então, eu estava procurando uma solução semelhante com a abiltidade para preservar os chars da EOL e descobri que não havia como fazer o que faço de melhor e fiz da minha própria utilidade, este é um gato nativo executável para o 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
Eu o chamo de sharp-cat porque é construído em C#, fique à vontade para fazer a varredura com um antivírus e o código-fonte será disponibilizado mediante solicitação