各フォルダの最初のサブディレクトリを zip に圧縮するための WinRAR バッチ ファイル

各フォルダの最初のサブディレクトリを zip に圧縮するための WinRAR バッチ ファイル

ディレクトリ内のすべてのフォルダをスキャンし、そのフォルダ内の最初の/唯一のサブフォルダの内容を zip ファイルとして作成するソリューションを見つけるのに苦労しています。

フォルダ/構造/階層の例を以下に示します。

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

中身をPCSE00398zip (同じ名前) に圧縮してI:\Unsorted\Sony - PlayStation Vita\NoNpDrm Physical\SENRAN KAGURA SV [PCSE00398] [NTSC]フォルダーに残しておきたいです。

答え1

@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" )

サブフォルダーの最後のレベルに到達するには、各サブフォルダーに別のフォルダーがあるかどうかを確認するだけで済みます。そうでない場合は、この最後のレベルのフォルダーを圧縮します。

for /d /rすべてのフォルダーを処理するループを使用し、ループ内の各フォルダーでtreeコマンドを と一緒に使用してfindstr、現在のフォルダーにさらにサブフォルダーがあるかどうかを確認できます。

すべてのサブフォルダを再帰的に使用することができます。tree "current_looping_folder" /afor /d /r、そして各出力をチェックすることでfindstr "文字列""\---") オペレーターにリダイレクト||そして行動を起こす(Rar) もし見つかりません\---コマンドtree出力のこの文字列\---Last Folder:

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

上記の出力は私が現在いるフォルダーからのものですF:\SUPERUSER\Q1599429が、ここにはサブフォルダーがありますLast Folderが、サブフォルダー内にいる場合はF:\SUPER_USER\Q1599429\Last Folder、以下の出力が表示されます。

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

findstr文字列が見つからない場合"\---"、現在のフォルダーにサブフォルダーはありません。これが最後のフォルダーです。

F:\SUPER_USER\Q1599429\Last Folder

この場合、サブフォルダーがない場合、コマンドは成功せず、オペレーターは実際のフォルダー レベルの最後のフォルダーでコマンドを正確に実行します...tree "Actual_Loop_Folder" /a | findstr "\---"||Rar.exe

  • 観測: 1追加の\文字をエスケープするには\findstr
 ... tree.com /a "%%~dpnxi"|findstr /bl \\--- ... 
  • 観測: 2ここでは、演算子が機械的にどのように動作するかを説明します||
                         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"
  • 観測: 3一緒に走る必要がある場合はWinRar.exe代わりにRar.exe、削除/置換/編集するだけです:
"%ProgramFiles%\WinRAR\Rar.exe" %_flag% "%%~i" "%%~dpni" |find/i ".rar"

"%ProgramFiles%\WinRAR\WinRar.exe" %_flag% "%%~i" "%%~dpni" 
  • 観測: 4編集して、カスタムフラグ/スイッチを使用することができます。Rar/WinRar指示:
<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+"

  • さらに詳しい情報:

[√]Forループ

[√]/D ループ

[√]For /R ループ

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

[√]CMD/バットオペレーター /dostips.com

[√]条件付き実行 || && ...

関連情報