Comment puis-je décompresser le fichier le plus récent dans un répertoire d'un fichier BAT?

StackOverflow https://stackoverflow.com/questions/178936

  •  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!

Était-ce utile?

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 que UNZIP 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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top