C:\Users\User1\Desktop\Photos2019 というフォルダがあり、サブフォルダが 100 個以上あります。各サブフォルダには写真があり、すべて名前が異なりますが、各サブフォルダ内の 3 枚の写真は同じです。ディレクトリ内の各フォルダに 2 つのサブフォルダ (1 つは「Base」、もう 1 つは「Other」) を作成し、同じ 3 つのファイルを「Base」フォルダに移動し、その他すべてを「Other」フォルダに移動できるようにしたいと考えています。次のようになります。
C:\Users\User1\Desktop\Photos2019
-Folder1/Base/Landscape.png
-Folder1/Base/Portrait.png
-Folder1/Base/Wide.png
-Folder1/Other/*.png
-Folder2/Base/Landscape.png
-Folder2/Base/Portrait.png
-Folder2/Base/Wide.png
-Folder2/Other/*.png
編集: これまでのところ、各フォルダーで実行できるバッチ スクリプトを作成でき、これで目的を達成できます。ループするために /r を追加しようとすると、スクリプトは実行され続けますが、まったく目的を達成しません。
私は持っている;
for %%a in (.) do md "Base"
for %%a in (.) do md "Other"
for %%a in (.) do move "Portrait.png" "Base"
for %%a in (.) do move "Landscape.png" "Base"
for %%a in (.) do move "Wide.png" "Base"
for %%a in (.) do move "*.png" "Other"
これは私が各サブフォルダーで実行しようとしているものです。
これを実行する最善の方法は何でしょうか? ありがとうございます。
答え1
まあ、コマンドのヘルプfor
を完全に理解するには、何度か読み返す必要があると私は断言します。
テスト用RamDrive Aの初期ツリーでは、
> tree /f a:\
A:\
└───Test
├───Folder1
│ Landscape.png
│ other.png
│ Portrait.png
│ Wide.png
│
└───Folder2
Landscape.png
other.png
Portrait.png
Wide.png
このバッチ:
:: Q:\Test\2019\08\22\SU_1473860.cmd
@Echo off
set "StartDir=C:\Users\User1\Desktop\Photos2019"
Rem set "StartDir=A:\Test"
set "Base=Landscape.png Portrait.png Wide.png"
CD /D "%StartDir%"
for /d %%D in (*) Do (
MD "%%~fD\Base"
MD "%%~fD\Other"
for %%B in (%Base%) Do Move "%%~fD\%%B" "%%~fD\Base\" >Nul 2>&1
Move "%%~fD\*.png" "%%~fD\Other" >Nul 2>&1
)
この結果になります:
> tree /F a:\
A:\
└───Test
├───Folder1
│ ├───Base
│ │ Landscape.png
│ │ Portrait.png
│ │ Wide.png
│ │
│ └───Other
│ other.png
│
└───Folder2
├───Base
│ Landscape.png
│ Portrait.png
│ Wide.png
│
└───Other
other.png