1 votes

Déplacer par lots le contenu d'une liste de fichiers zip jusqu'au niveau racine

J'ai environ 8 000 fichiers Zip, chacun d'entre eux contient un dossier portant le même nom. Ils ressemblent à ceci

Example #1.zip
   Example #1
       1.png
       2.png
       3.png

Existe-t-il un moyen de déplacer les fichiers contenus dans le dossier vers la racine du Zip, puis de supprimer le dossier désormais vide ? le résultat devrait ressembler à ceci

Example #1.zip
   1.png
   2.png
   3.png

0voto

Zac67 Points 2089

Assumer Example #1.zip est en fait un dossier (issu du déballage), et non un fichier zip :

cd "Example #1.zip"
for /r %f in (*.png) do move "%f" .

(Vous pouvez saisir ces lignes telles quelles dans l'invite de commande. Si vous les exécutez à partir d'un fichier .cmd, vous devrez utiliser l'option %%f 代わりに %f dans les deux cas).

Si les fichiers sont toujours zippés, vous devrez probablement les dézipper sans les noms de chemin et les rezipper. Vous pouvez utiliser l'outil pas de compression / magasin car le format .png n'est pas compressé de manière significative de toute façon.

0voto

Señor CMasMas Points 3146

J'ai écrit le fichier batch suivant et il fonctionne pour résoudre le problème que vous essayez de résoudre. Il prend les fichiers zip dont la structure de répertoire correspond au nom du fichier zip lui-même, et crée les fichiers zip qui n'y correspondent pas. Je n'en ai créé que 5 pour tester, mais il est effectivement assez rapide et laisse deux dossiers "Processed" et "Fixed" bien rangés lorsqu'il est terminé.

  • Vous aurez besoin de la version en ligne de commande de 7zip ( 7z.exe o 7za.exe ) soit dans votre chemin d'accès, soit dans le même répertoire que les zips et le fichier batch. Si vous avez 7za.exe le renommer en 7z.exe .
  • Vous devriez copier vos zips dans un autre endroit avant de l'exécuter (juste au cas où !).
  1. Il prend les fichiers zip dans le même répertoire que le fichier batch.
  2. Il les décompresse un par un.
  3. Il compresse un nouveau fichier zip EN S'ATTENDANT à ce qu'il y ait un répertoire portant le même nom que le fichier zip lui-même dans un sous-dossier appelé "Fixed".
  4. Il déplace l'ancien fichier zip dans un dossier appelé "Processed".

Il y a très peu de garanties dans ce domaine. Le dossier contient UNIQUEMENT des fichiers zip qui correspondent à votre schéma. Facilement corrigeable, mais je n'ai pas pris la peine de protéger quoi que ce soit.

@echo off
Set WildCard=*.zip
Set ZipFileDir=%~DP0
Set FixedZipFilesDir=%ZipFileDir%Fixed
Set ProcessedZipFilesDir=%ZipFileDir%Processed
Set WorkingDir=%ZipFileDir%temp

md "%WorkingDir%"
md "%FixedZipFilesDir%"
md "%ProcessedZipFilesDir%"

REM Loop on zips in the directory.. call fn ProcessZip with each name
for %%f in (%WildCard%) do call :ProcessZip "%%f"

REM Clean up our temp working space and exit
rd /s /q "%WorkingDir%"
goto :EOF

:: --------------------------------------------------
REM Function to process each zip file found.
:: --------------------------------------------------
:ProcessZip
Set InputZipPath=%~DP1
Set InputZipName=%~N1

REM Extract the file to our temporary working directory
7z x "%InputZipPath%%InputZipName%.zip" -o%WorkingDir%
REM Create a new zip excluding the path
7z a "%FixedZipFilesDir%\%InputZipName%.zip" "%WorkingDir%\%InputZipName%\*"
REM Move the original zip to our processed folder.
move "%InputZipPath%%InputZipName%.zip" "%ProcessedZipFilesDir%"
goto :EOF

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