
ディレクトリ内のすべてのフォルダをスキャンし、そのフォルダ内の最初の/唯一のサブフォルダの内容を zip ファイルとして作成するソリューションを見つけるのに苦労しています。
フォルダ/構造/階層の例を以下に示します。
I:\Unsorted\Sony - PlayStation Vita\NoNpDrm Physical\SENRAN KAGURA SV [PCSE00398] [NTSC]\PCSE00398
中身をPCSE00398
zip (同じ名前) に圧縮して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
、現在のフォルダーにさらにサブフォルダーがあるかどうかを確認できます。
FOR /R - Loop through files (recursively) FOR /D - Loop through several folders/directories
The option /D /R is undocumented, but can be a useful combination, while it will recurse through all subfolders the wildcard will only match against Folder/Directory names (not filenames) Note: Source linked to ss64.com
すべてのサブフォルダを再帰的に使用することができます。tree "current_looping_folder" /a
for /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 ループ