Resultados inesperados com o comando Copiar e arquivos do Excel

3

Eu notei algo estranho ao executar o comando Copiar de um arquivo de lote do Windows e fiquei me perguntando se alguém já encontrou isso antes e pode explicar a causa.

Eu tenho uma linha em um arquivo de lote que copia um arquivo excel do local A para o local B e também renomeia o arquivo. Por exemplo:

Copy \server\share\folder\locationA\file_*.xlsx \server\share\folder\locationB\file.xlsx /y

A cópia parece completa, já que o excel está presente no local B, no entanto, quando vou abrir o arquivo, recebo uma mensagem de erro dizendo:

"Excel cannot open the file... because the file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file."

Executei alguns testes com a linha de comando acima e notei que esse problema só acontece se eu usar um caractere curinga no nome do arquivo na parte A. Por exemplo, o arquivo copia e posso abri-lo bem com este comando:

Copy \server\share\folder\locationA\file_LongName.xlsx \server\share\folder\locationB\file.xlsx /y

Eu percebo que existem várias maneiras de corrigir isso, mas não estou interessado em uma solução, estou interessado em uma explicação. Minha pergunta é por que isso está acontecendo?

    
por roger21 01.10.2018 / 22:34

1 resposta

3

O motivo pelo qual você está vendo esse problema é que o padrão curinga muda o comando COPY para o modo de concatenação, que é projetado para arquivos ASCII de texto simples. No modo ASCII, alguns dados em arquivos binários parecem um caractere "End of File".

Arquivos Excel .XLSX são essencialmente arquivos Zip com uma extensão diferente e arquivos Zip são arquivos binários, não ASCII. O comando COPY está tratando esse arquivo binário como um arquivo ASCII e tentando concatenar o conteúdo com nada.

Pode-se pensar que concatenar um arquivo com nada lhe daria o mesmo arquivo com o qual você começou, mas não neste caso.

O comando COPY continua processando um arquivo apenas até atingir um caracter End of File (EOF) . Quando alcança esse personagem, continua no próximo arquivo. (Neste caso, ele pára completamente o processamento.)

Seus arquivos binários do Excel contêm dados que, quando convertidos em ASCII, representam caracteres EOF e, portanto, a concatenação do arquivo termina antes do esperado.

Para ilustrar isso, usei o comando COPY para concatenar um arquivo 7zip com um arquivo em branco do Excel (acabei de renomeá-los como file_1.xlsx e file_2.xlsx ). Eu abri o arquivo 7zip e o arquivo de saída no Notepad ++ e comparei o conteúdo usando o WinMerge.

Comovocêpodevernaimagem,osdoisarquivossãoidênticosatéocaractere(1A).

Emseguida,concateneidoisarquivosdetextosimples,quefuncionaramperfeitamente.Noentanto,depoisqueinseriessecaractere(1A)(queaparecenoNotepad++como(sub))emumdosarquivosdetexto,confirmeiqueocomandoCOPYparouexatamentenessepontoepassouparaopróximoarquivo.

    
por 02.10.2018 / 00:30