WinRAR-Batchdatei zum Komprimieren des ersten Unterverzeichnisses in jedem Ordner in eine ZIP-Datei

WinRAR-Batchdatei zum Komprimieren des ersten Unterverzeichnisses in jedem Ordner in eine ZIP-Datei

Ich versuche, eine Lösung zu finden, mit der ich alle Ordner in einem Verzeichnis scannen und in diesen Ordnern eine ZIP-Datei mit dem Inhalt des ersten/einzigen Unterordners erstellen kann.

Hier ist ein Beispiel für Ordner/Struktur/Hierarchie

I:\Unsorted\Sony - PlayStation Vita\NoNpDrm Physical\SENRAN KAGURA SV [PCSE00398] [NTSC]\PCSE00398

Ich möchte den Inhalt PCSE00398in einer ZIP-Datei (mit dem gleichen Namen) komprimieren und im I:\Unsorted\Sony - PlayStation Vita\NoNpDrm Physical\SENRAN KAGURA SV [PCSE00398] [NTSC]Ordner belassen.

Antwort1

@echo off 

set "_flag=a -ep1 -m5 -cfg- -y -o+"
cd /d "%~dp0" && for /d /r "I:\test\." %%i in (*
)do 2>nul tree.com /a "%%~dpnxi"|findstr /bl \\--- >nul || (
"%ProgramFiles%\WinRAR\Rar.exe" %_flag% "%%~i" "%%~dpni" |find/i ".rar" )

Um die letzte Ebene eines Unterordners zu erreichen, muss lediglich geprüft werden, ob in jedem Unterordner ein weiterer Ordner vorhanden ist. Andernfalls muss dieser Ordner der letzten Ebene komprimiert werden.

Sie können die Schleife verwenden for /d /r, die alle Ordner durchläuft, und in jedem Ordner innerhalb der Schleife den treeBefehl zusammen mit verwenden findstr, um zu überprüfen, ob der aktuelle Ordner weitere Unterordner hat oder nicht.

Sie können die in allen Unterordnern rekursiv verwenden mittree "current_looping_folder" /afor /d /rund durch Überprüfen jeder Ausgabe mitfindstr "Zeichenfolge"("\---") Weiterleitung zum Betreiber||und Maßnahmen ergreifen (Rar) Wennnicht gefundendiese Zeichenfolge \---in der treeBefehlsausgabe \---Last Folder:

Folder PATH listing
Volume serial number is A0AD-DC56
F:\SUPER_USER\Q1599429
\---Last Folder

Die obige Ausgabe stammt aus dem Ordner, in dem ich mich befinde, F:\SUPERUSER\Q1599429und hier haben wir den Last FolderUnterordner. Wenn ich mich jedoch im F:\SUPER_USER\Q1599429\Last FolderUnterordner befinde, erhalte ich die folgende Ausgabe:

Folder PATH listing
Volume serial number is A0AD-DC56
F:\SUPER_USER\Q1599429\Last Folder
No subfolders exist

Wenn findstrdie Zeichenfolge nicht gefunden wird "\---", habe ich im aktuellen Ordner keinen Unterordner. Dies ist der letzte Ordner:

F:\SUPER_USER\Q1599429\Last Folder

In diesem Fall schlägt der Befehl fehl, wenn kein Unterordner vorhanden ist. Lassen Sie den Operator den Befehl dann genau in Ihrem letzten Ordner auf der aktuellen Ordnerebene ausführen …tree "Actual_Loop_Folder" /a | findstr "\---"||Rar.exe

  • Beob.: 1Der Zusatz \wird benötigt, um das Zeichen \infindstr
 ... tree.com /a "%%~dpnxi"|findstr /bl \\--- ... 
  • Obs.: 2Hiermit soll die mechanische Funktionsweise des Operators veranschaulicht werden ||:
                         command1 || command2
                 execute command1 || only execute command2 (if) command1 fails
          if tree folder /a fails || there is no subfolder in it
      there is no subfolder in it || this is the the last subfolder
       this is the last subfolder || run rar flags in the \Last Folder
tree /a "%~fi"|findstr "\---">nul || Rar "I:\Unsorted\...\PCSE00398"
  • Obs.: 3Wenn Sie mitWinRar.exestattdessen Rar.exeeinfach entfernen/ersetzen/bearbeiten:
"%ProgramFiles%\WinRAR\Rar.exe" %_flag% "%%~i" "%%~dpni" |find/i ".rar"

"%ProgramFiles%\WinRAR\WinRar.exe" %_flag% "%%~i" "%%~dpni" 
  • Obs.: 4Sie können Ihre benutzerdefinierten Flags/Switches für IhreRar/WinRarBefehl:
<Commands>
        a    ==  Add files to archive 

<Switches>

      cfg-   ==  Disable read configuration 
      ep1    ==  Exclude base directory from names 
  m<0..5>    ==  Set compression level (0-store...3-default...5-maximal) 
   o[+|-]    ==  Set the overwrite mode 
        y    ==  Assume Yes on all queries 
-----------------------------------------------------------------------
set "_flag=a -ep1 -m5 -cfg- -y -o+"

  • Weiterführende Literatur:

[√]For-Schleife

[√]Für /D-Schleife

[√]Für /R-Schleife

[√]WinRar.exe | Rar.exe /?

[√]CMD/Bat-Operator /dostips.com

[√]Bedingte Ausführung || && ...

verwandte Informationen