Comment puis-je décompresser le fichier le plus récent dans un répertoire d'un fichier BAT?
-
05-07-2019 - |
Question
Je travaille sur un système de compilation. Le système de génération publie les résultats sous forme de fichier zip dans un répertoire. Malheureusement, je n'ai pas de moyen facile de connaître le nom du fichier zip, car il est horodaté. Pour la prochaine opération, je dois décompresser ce fichier zip à un emplacement spécifique, puis effectuer quelques opérations supplémentaires.
Je suppose que je pourrais changer le système de compilation et indiquer le nom du fichier zip obtenu à partir de la ligne de commande. processus précédent est réussi).
Comment puis-je lancer une commande unzip qui ne s'appliquera qu'au dernier fichier zip du répertoire, en ignorant tous les autres?
EDIT: J'ai plutôt décidé d'utiliser les fonctionnalités d'ANT pour cette tâche. Cependant, c’est toujours une bonne astuce d’avoir du sommeil ... Merci pour la réponse!
La solution
Cela devrait le faire:
FOR /F usebackq %%i IN (`DIR /B /O-D *.ZIP`) DO UNZIP %%i && GOTO DONE || GOTO DONE
:DONE
Cela fonctionne comme suit:
-
DIR / B / O-D * .ZIP
répertorie tous les fichiers ZIP en ordre de date inversé dans un ordre "nue". - c'est-à-dire un nom uniquement - format. -
FOR / F usebackq
est utilisé pour effectuer une boucle sur la sortie de la commande. -
& amp; & amp; GOTO FAIT || GOTO DONE
s'assure queUNZIP
n'est exécuté que pour le premier fichier. Vous avez besoin à la fois de& amp; & amp;
(et) et de||
(ou) au cas où la décompression échoue pour une raison quelconque.
Vous devez modifier UNZIP %% i
pour la commande de décompression que vous souhaitez utiliser.
MODIFIER Ce qui précède fonctionnera tant que le nom de fichier Zip ne contient aucun espace. Si vous souhaitez gérer les noms de fichiers avec des espaces, utilisez la variante suivante:
FOR /F "tokens=*" %%i IN ('DIR /B /O-D *.ZIP') DO UNZIP "%%i" && GOTO DONE || GOTO DONE
:DONE
Les différences sont les suivantes:
-
Les " tokens = * " L'option renvoie l'intégralité du nom de fichier même s'il contient des espaces.
-
Le nom de fichier transmis à UNZIP est cité
-
Cette variante utilise des guillemets simples pour la commande DIR, elle n'a donc pas besoin de & use; usebackq " option.
Autres conseils
Si Cygwin ou un autre environnement de type Unix est une alternative
unzip "$(ls -tr *zip | tail -n1)"
le ferait
Je pense que vous auriez besoin de 7-zip pour pouvoir écrire un script de compression / décompression.
Pourquoi utiliser des fichiers bat quand vous avez des applications PowerShell ou console?