Windows 批处理文件对子文件夹进行排序

Windows 批处理文件对子文件夹进行排序

我有一个文件夹,C:\Users\User1\Desktop\Photos2019,里面有 100 多个子文件夹。每个子文件夹中都有照片,所有照片的名称各不相同,但每个文件夹中的 3 张照片是相同的。我希望能够在目录中的每个文件夹中创建 2 个子文件夹,一个名为“Base”,一个名为“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

相关内容