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?
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?
Réponses:
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
e
signifie extraire, -o
est le répertoire de sortie.
Ensuite, vous ren
les fichiers à l'intérieur (en utilisant tout ce que vous avez dans votre script de lot à partir de maintenant).
Enfin, nous a
intégrons tous les *
fichiers ( ) C:\Temporary\Dir
dans 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 -sdel
assurons que tous les fichiers ajoutés à l’archive sont supprimés.
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.
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.
"@ name"
et "@=newname"
?
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.