windows - Sådan zip listen over undermapper fra tekstfilen og medtage forælder mappenavn i filnavn?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en .txt-fil, som indeholder en meget lang genereret liste over mapper på tredje niveau, som jeg ønsker at zip ind indholdet af hver enkelt. Så et forenklet eksempel, dette ville være indholdet af list.txt


F:Folder2005-05-11[ABC #1] FolderA
F:Folder2005-05-11[ABC #2] FolderB
F:Folder2005-05-26[ABC #1] FolderA


Hvis jeg gør dette


for /F "delims=" \%\%X in (list.txt) do "7z.exe" a -mx=0 "\%\%X.zip" "\%\%X*"


Filnavnet på hver zip er kun den endelige mappe, der bliver zipet. Så [[ABC # 1]] FolderA.zip og så videre. Alle disse lynlåse bliver senere flyttet ud af denne sammenhæng, og derfor skal jeg tydeligere nævne dem.


I en absolut ideel verden synes jeg, at de skal tage 2. niveau navn (datoen) og bare den del i firkantede parenteser fra den sidste mappe (som altid er konsekvent). Så 2015-05-11 [[ABC # 1]]. lynlås, men jeg ved ikke, om det er muligt på en eller anden måde.


Den tilsyneladende lettere valgmulighed er derfor bare at indbefatte den overordnede katalog på zip, så 2005-05-11 [[ABC # 1]] FolderA.zip, hvordan kunne jeg gøre det?


Selvfølgelig bruger jeg 7zip i mit nuværende script, men hvis det er nemmere med WinRAR eller et andet værktøj, der er fint.

Bedste reference


@ECHO OFF
SETLOCAL
SET "sourcedir=U:sourcedir"
SET "filename1=\%sourcedir\%q42060809.txt"
for /F "usebackqdelims=" \%\%X in ("\%filename1\%") do (
 FOR /f \%\%d IN ("\%\%~dpX.") DO (
  FOR /f "delims=[]" \%\%b IN ("\%\%~nX") DO (
   ECHO("7z.exe" a -mx=0 "\%\%~dpX\%\%~nxd[\%\%b].zip" "\%\%X*"
  )
 )
)

GOTO :EOF


Du skal ændre indstillingen for sourcedir for at passe til dine forhold.


Jeg brugte en fil med navnet q42060809.txt, der indeholder dine data til min testning.


De nødvendige kommandoer er kun ECHO ed til testformål. Når du har bekræftet, at kommandoerne er korrekte , skal du fjerne ECHO( for at zip zip-filerne.


Naturligvis behøver du ikke usebackq, hvis du ikke citerer filnavnet '


Trin 2 - tilføj . til ~dp dato og sti dele af \%\%X. Resultatet i \%\%~nxd er N ame og e X spænding af det laveste niveau af katalog.


Derefter, med ~n ( N ame) -delen kun af \%\%X, tilkender det ved hjælp af parenteserne som afgrænsere, så delene mellem parenteserne vises i \%\%b]]


Bland derefter og match de relevante elementer. Indsæt beslagene igen, hvis det er nødvendigt, og tilføj et mellemrum før den åbne beslag, hvis det passer til din fancy ...