À l'aide d'un fichier de commandes, puis-je renommer des fichiers au sein d'un fichier ZIP?

1

J'ai un fichier de commandes qui renomme des fichiers.

Est-il possible de renommer des fichiers dans un fichier ZIP? Sinon, est-il possible de les "extraire" en arrière-plan, de les renommer et de les "rajouter" dans la même archive ZIP?

MaKu
la source
Je ne comprends pas bien. Essayez-vous de les renommer en .zip (ce qui ne fonctionnerait évidemment pas), ou voulez-vous les ajouter à une archive ZIP et (éventuellement) les compresser?
fragamemnon
J'ai un fichier .zip qui contient des documents. Je veux renommer ces documents avec mon fichier .bat. Cela fonctionne bien lorsque vous décompressez-les puis utilisez le fichier .bat. Cependant, lorsque j'essaie de renommer les documents QUAND ILS SONT ENCORE ZIPPÉS, cela ne fonctionne pas (ce qui est logique). Y a-t-il un moyen d'y arriver?
MaKu
Compris. J'ai répondu à l'aide d'un programme gratuit (portable aussi) que je connais bien.
fragamemnon

Réponses:

1

Vous pouvez utiliser la version en ligne de commande de 7-zip

Par exemple:

7z e archive.zip -o C:\Temporary\Dir
ren C:\Temporary\Dir\*.* *.renamed
7z a archive.zip C:\Temporary\Dir\* -aoa -y -sdel

esignifie extraire, -oest le répertoire de sortie.
Ensuite, vous renles fichiers à l'intérieur (en utilisant tout ce que vous avez dans votre script de lot à partir de maintenant).
Enfin, nous aintégrons tous les *fichiers ( ) C:\Temporary\Dirdans le même dossier archive.zip, mais comme ils existent, nous aimerions écraser tous ( -aoa) et nous assurer que nous sommes d’accord ( -y) avec les invites (si elles apparaissent).
Oh, et parce que nous aimons le rendre propre, nous nous -sdelassurons que tous les fichiers ajoutés à l’archive sont supprimés.

fragamemnon
la source
1

Le format ZIP stocke les métadonnées et les données séparément pour chaque entrée. Ainsi, cela vous permettrait de parcourir les entrées et de changer le nom de l'entrée à la volée sans décompresser / compresser les données, de manière efficace en continu, en mémoire et sur disque.

Je ne connais pas d'outil le proposant tel quel, il vous faudrait donc utiliser une bibliothèque telle que libzip et le lier avec votre langue préférée.

Donc, si vos archives zip sont petites et que vous n'effectuez pas cette tâche encore et encore, vous devez vous en tenir à un processus d'extraction / renommer / archiver.

Setop
la source
1

Il est un peu tard, mais comme cela a fonctionné pour moi, je vais partager mes découvertes avec:

http://www.info-zip.org/FAQ.html#rename

Fondamentalement, vous devez utiliser l'utilitaire zipnote.

Example:
     zipnote foo.zip > foo.tmp
     ed foo.tmp
     ... then you edit the comments, save, and exit ...
     zipnote -w foo.zip < foo.tmp

"@ name" can be followed by an "@=newname" line to change the name

Il va toujours réécrire le fichier entier, mais une étape plus courte que extraire le fichier, renommer, supprimer le fichier de zip, ajouter un fichier renommé en arrière.

xrmb
la source
Et espérons ne pas perdre toutes sortes de métadonnées que les archives .zip ...
grawity
Pouvez-vous expliquer plus en détail ce que vous dites "@ name"et "@=newname"?
G-Man
@grawity L'exemple que j'ai publié provient de l'utilitaire de zipnote --help lui-même. En gros, vous videz les métadonnées d'un fichier zip existant dans un fichier temporaire, éditez ce fichier et ajoutez une nouvelle ligne après la ligne "@ name" avec "@ = newname" (où name et newname sont des valeurs que vous devez modifier). Rechargez ensuite les métadonnées dans le fichier zip en espérant que tout se mette à jour.
xrmb
@ G-Man Mon fichier zip ne semble pas contenir de métadonnées, et je ne sais pas ce que les zips méta-données prennent en charge au-delà des commentaires de fichier / archive. Mais je m'attendrais à ce qu'ils se perdent. D'après ce que j'ai remarqué, cette méthode est beaucoup plus rapide que n'importe quel extrait / renommer / remballer ou supprimer / lu avec un nouveau nom. Mais cela nécessite un travail supplémentaire entre les deux. Son utilisation dans les scripts n'en vaut probablement pas la peine.
xrmb
(1) Vous semblez avoir adressé vos commentaires. Celui adressé à @grawity semble être une réponse à ma question et inversement. (2) Les fichiers zip contiennent normalement la date / heure de modification des fichiers compressés; c'est un exemple de métadonnées. D'autres incluent la taille d'origine, la taille compressée, la méthode de compression, le taux de compression, la méthode de cryptage, la somme de contrôle et les attributs / autorisations. Et il semble que WinZip puisse conserver le chemin d'accès en tant qu'élément de métadonnées distinct du nom de fichier.
G-Man le
0

Vous pouvez extraire -> renommer -> compresser comme suggéré ci-dessus, ou éditer les données hexadécimales du zip afin de changer les noms à l'intérieur du fichier.

Un exemple: eg1

Évidemment, c'est beaucoup plus difficile à faire avec batch que d'extraire, de renommer et de compresser, mais si vous devez le renommer alors qu'il est toujours dans le zip, c'est possible, car le nom réel du fichier existe dans le fichier .zip, vous pouvez également convertir le nom d'origine en hexadécimal, rechercher ce tableau hexadécimal dans le fichier et le remplacer par un nouveau.

P. Ktinos
la source