进一步阅读:

进一步阅读:

我的问题是

我在主文件夹下收集了大量图片,分布在几个子文件夹中(我是说几百个文件夹,而不是几个),例如:

生日

妈妈

姐姐

弟弟

等等。

我找到了几个批处理文件,它们可以自动创建主文件夹下每个文件夹的 zip 文件(与子文件夹同名),然后将这些 zip 文件移动到同名文件夹中,以便在图片查看器中使用,但是,所有图片仍然在每个子文件夹中,手动删除数千张图片是一件苦差事

我正在寻找一个批处理脚本,它可以删除子文件夹内的所有图片,但保留 zip 文件和单个 0000.jpg / png / bmp 文件,作为文件夹的封面

我在网上找到了这段代码:

for /f %F in ('dir /b /a-d ^| findstr /vile ".filetypeA .filetypeB"') do del "%F"

这显然可以满足我的要求,但是它需要对每个文件夹都执行此操作,这违背了我想要的自动化目的

任何帮助将不胜感激

编辑:

澄清这个问题:我只需要 *.zip 文件和 0000.JPG / PNG / BMP 文件,不需要其他任何文件

0000.* 文件将被 Android 应用程序用作文件夹的封面(特定应用程序,如漫画查看器),Windows 不需要它,因此批处理只需要跳过这些文件并删除其余文件

答案1

编辑:

澄清一下这个问题:
我只需要 *.zip 文件和 0000.JPG // PNG // BMP 文件,不需要其他任何东西。

0000. 文件将被 Android 应用程序用作文件夹的封面
(特定应用,如漫画查看器),Windows 不需要这种
这样,批处理只需要跳过这些文件并删除其余文件


@echo off && Setlocal EnableDelayedExpansion

cd /d "D:\The\Full\Path\To\Your\Main Folder"
set "_skipt=findstr /live "0000\.jpg 0000\.png 0000\.bmp \.zip"

for /d /r %%i in =;(*);= do ;(cd /d "%%~dpnxi" && for /f delims^= %%? in =;(
    '2^>nul dir /b /a:-d ^| 2^>nul !_skipt! ');= do del /q /a /f "%%~f?" );=
   
endlocal


// Previous version in another understanding //


 @echo off && Setlocal EnableDelayedExpansion

cd /d "D:\The\Full\Path\To\Folder"
set "_fdel=*.jpeg *.jpg *.png *.gif *.tiff *.psd *.pdf *.eps *.ai *.indd *.raw"

for /d /r %%i in =;(*)do ;( cd /d "%%~fi" && for /f delims^= %%G in =;('
    2^>nul %__AppDir__%where.exe ".:%%~nxi.zip" ".:Desktop.ini"'
   )do =;(
        if "%%~nxi.zip" == "%%~nxG" =;( 
               call %:^) "%%~nxG" zip
           )=; else if "%%~xG" == ".ini" =;( 
               for /f tokens^=2delims^=^= %%X in =;('
                    2^>nul findstr /i "Logo=" ^<".\%%~nxG"')do call %:^) "%%~nxX" img
               for /f delims^= %%? in ('2^>nul dir /b /a:-d %_fdel% ^| 2^>nul findstr /vei "!_zip! !_img!"'
                   );= do echo\del /q /a /f "%%~dpnx?"
           );=
       );=
    for %%v in (var,img,zip,rm\)do set "_%%~v=" <nul
   );=
       
%:^)
if "%~1" == "" =;( 
    endlocal && goto :eOf
   );= else set "_var=%~1"
   
set "_rm\=%_var:*\=" & set "_var=%"
set "_%~2=!_var: =/\ !"
set "_%~2=!_%~2:.=\.!" & exit /b

  • 该任务需要for运行一个循环和一行中的其他命令,排除其目标文件但如果文件夹中存在则保留 .zip 文件,如果定义了则保留每个文件夹的封面文件,还保留另一个扩展名可以是 .jpg、.png 或 .bmp 的文件。

关于:
减去 zip 文件和一个 0000.jpg / png / bmp 文件,它将充当
文件夹的封面

  • 在每个文件夹中循环过滤和/或省略 .zip 文件是一件简单、琐碎的事情,但对于分配给文件夹封面的图像,只会保留一个文件,无论是 .jpg、png 还是 bmp,这都会让您在文件夹中保留一个附加文件 (desktop.ini),而这个文件就是分配给文件夹本身的封面图像的名称设置。

  • 删除文件(隐藏)的另一种方法desktop.ini是查阅下面的链接,这些链接会指导您将所需的文件重命名为Folder.jpg,如果是这种情况,请特别注意,这将是另一个问题/答案:

如何更改照片文件夹正面的照片?

将图片添加到您的文件夹并将其命名为 folder.jpg。该图片现在将显示在文件夹图标上。


对于当前所问的问题,我建议一个批处理程序,它将执行我所理解的当前版本问题中的操作

  1. 递归列出文件;

  2. 在每个文件夹中检查是否存在与当前循环中的文件夹同名的某个(唯一的).zip 文件,如果确认,则保留/不删除它;

  3. 检查 Desktop.ini 文件是否存在,并从中获取/读取当前用作当前文件夹封面的文件的名称,完成后,使用它来保留/不删除定义为文件夹封面的文件;


观察1:当前批处理假定用于覆盖文件夹的文件是唯一的并且每个文件都在其自己的文件夹中。

观察2:有效删除的命令在中被“中和” echo\ del ...,以便可以验证命令以及相应命令中要保留/删除的文件是否正确。


进一步阅读:

相关内容