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ù !).
- Il prend les fichiers zip dans le même répertoire que le fichier batch.
- Il les décompresse un par un.
- 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".
- 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