4 votes

Résultats inattendus avec la commande de copie et les fichiers Excel

J'ai remarqué quelque chose d'étrange lors de l'exécution de la commande Copy à partir d'un fichier batch Windows et je me demandais si quelqu'un avait déjà rencontré ce problème et pouvait en expliquer la cause.

J'ai une ligne dans un fichier batch qui copie un fichier Excel d'un emplacement A à un emplacement B et renomme également le fichier. Par exemple :

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

La copie semble s'être déroulée correctement, puisque le fichier Excel est présent à l'emplacement B, mais lorsque je veux ouvrir le fichier, j'obtiens un message d'erreur indiquant que :

" Excel ne peut pas ouvrir le fichier... car le format ou l'extension du fichier n'est pas valide ". Vérifiez que le fichier n'a pas été corrompu et que l'extension de fichier correspond au format du fichier."

J'ai effectué quelques tests avec la ligne de commande ci-dessus et j'ai remarqué que ce problème ne se produit que si j'utilise un caractère générique dans le nom de fichier de la partie A. Par exemple, le fichier se copie et je peux l'ouvrir sans problème avec cette commande :

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

Je me rends compte qu'il existe de nombreuses façons de résoudre ce problème, mais je ne suis pas intéressé par une solution, je suis intéressé par une explication. Ma question est la suivante pourquoi cela se produit-il ?

3voto

Worthwelle Points 4190

La raison pour laquelle vous rencontrez ce problème est que le modèle de caractères génériques change le COPY en mode concaténation, qui est conçu pour les fichiers ASCII en texte brut. En mode ASCII, certaines données des fichiers binaires ressemblent à un caractère de "fin de fichier".


Les fichiers Excel .XLSX sont essentiellement des archives Zip avec une extension différente. et les archives Zip sont des fichiers binaires, pas ASCII. Le site COPY traite ce fichier binaire comme un fichier ASCII et essaie de concaténer son contenu avec rien.

On pourrait penser qu'en concaténant un fichier avec rien, on obtient le même fichier qu'au départ, mais pas dans ce cas.

En COPY continue le traitement d'un fichier seulement jusqu'à ce qu'elle atteigne une commande Caractère de fin de fichier (EOF) . Une fois qu'il a atteint ce caractère, il passe au fichier suivant. (Dans ce cas, il arrête complètement le traitement).

Vos fichiers Excel binaires contiennent des données qui, lorsqu'elles sont converties en ASCII, représentent des caractères EOF et donc la concaténation du fichier se termine plus tôt que prévu.

Pour illustrer cela, j'ai utilisé votre COPY pour concaténer un fichier 7zip avec un fichier Excel vierge (je les ai juste renommés en file_1.xlsx y file_2.xlsx ). J'ai ouvert le fichier 7zip et le fichier de sortie dans Notepad++ et j'ai comparé les contenus en utilisant WinMerge.

WinMerge comparison

Comme vous pouvez le voir dans l'image, les deux fichiers sont identiques jusqu'à l'étape de l'écriture. (1A) caractère.

Ensuite, j'ai concaténé deux fichiers de texte brut, ce qui a fonctionné sans problème. Cependant, une fois que j'ai inséré ce (1A) (qui apparaît dans Notepad++ comme (sub) ) dans l'un des fichiers texte, j'ai pu confirmer que l'élément COPY s'est arrêtée exactement à ce point et est passée au fichier suivant.

Concatenation in Notepad++

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X