找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 3073|回复: 8

[文件操作] [已解决]请教批处理如何根据目录内容获取指定区间的JPG文件?

[复制链接]
发表于 2025-8-22 00:08:28 | 显示全部楼层 |阅读模式
本帖最后由 guliduo 于 2025-8-25 23:54 编辑

有一份表格,内容有三列分别是文件夹名、起始页号、终止页号
需要进入每行的文件夹名所对应的文件夹,目标是只留下起始页号到终止页号之间的JPG文件
第1种思路:可以采取先在result文件夹内新建对应的文件夹A-0001,A-0008,然后将原A-0001,A-0008文件夹内的起始页号-终止页号之间的JPG文件移动到新建的文件夹
第2中思路:可以直接在文件夹内只保留起始页号到终止页号之间的JPG文件,其余的都删除掉

另外起始页号-终止页号之间的文件是指,比如A-0001中的001-008,是要包含001,002,002-01,002-03,003,004,005,006,006-01,007,008,008-01,008-02(文件名都是3位数字,如001,有的数字后边会存在加“-”,如001,001-01,001-02,001-03,所以001-008区间要包含1-8之间所有带“-”的情况和终止页号008后边可能也会有带“-”的文件)
请教大佬们批处理可以完成这种功能吗,excel也可以替换为txt文件,烦请大佬指点
发表于 2025-8-22 08:20:13 | 显示全部楼层
excel保存为csv
  1. @echo off
  2. cd /d "%~dp0"
  3. @REM 新建文件夹;;
  4. md "result" 2>nul
  5. for /f "skip=1 tokens=1-3 delims=," %%A in (test.csv) do (
  6.   md "result\%%~A" 2>nul
  7.   for %%D in ("%%~A\*.jpg") do (
  8.     for /f "delims=-" %%E in ("%%~nD") do (
  9.       if "%%~E" geq "%%~B" if "%%~E" leq "%%~C" copy /y "%%~D" "result\%%~A"
  10.     )
  11.   )
  12. )
  13. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
guliduo + 1 乐于助人

查看全部评分

发表于 2025-8-22 14:34:24 | 显示全部楼层
excel另存为csv
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "useback tokens=1-3 delims=," %%a in ("1.csv") do (
  4.         if exist "%%~a\*.jpg" (
  5.                 md "result\%%~a"
  6.                 set folder=%%~a
  7.                 for /l %%l in (1%%~b 1 1%%~c) do (
  8.                         set num=%%l
  9.                         setlocal enabledelayedexpansion
  10.                         copy "!folder!\!num:~1!*.jpg" "result\!folder!"
  11.                         endlocal
  12.                 )
  13.                 rd "result\%%~a" 2>nul
  14.         )
  15. )
  16. pause
复制代码
发表于 2025-8-22 16:12:14 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-8-22 16:37 编辑

回复 1# guliduo

以下批处代码采用一楼所述第二种操作方法,并假设源文件 1.xls 已被另存为用逗号分隔每行字段的文本文件 1.csv,其文本行格式如 》
   A-0001,001,008
   A-0002,001,008
   ...
批处脚本文件与 1.csv 文件以及每个目标文件夹如 A-0001,A-0002 均位于当前目录下

  1. @echo off &for /f "tokens=1-3 delims=," %%a in (1.csv) do (
  2.    pushd "%%~a"
  3.    for %%F in (*.jpg) do (
  4.       if /i "%%~nF" lss "%%~b" del /q "%%F"
  5.       if /i "%%~nF" gtr "%%~c" del /q "%%F" )
  6.    popd ) 2>nul
  7. pause&exit/b
复制代码
 楼主| 发表于 2025-8-22 19:41:40 | 显示全部楼层
回复 2# flashercs


    谢谢大大,JPG数量较大,我将复制改成了剪切,看一下速度会不会有提升
 楼主| 发表于 2025-8-22 19:56:43 | 显示全部楼层
回复 3# 77七


    感谢帮助🙏,测试了一下可以达到想要的结果
 楼主| 发表于 2025-8-22 20:01:07 | 显示全部楼层
回复 4# aloha20200628


    谢谢指点,用A-0001和A-0008测试了一下,结束后A-0001文件夹内的文件都被删除了,A-0008文件夹留下了指定的文件,1.CSV内容是A-0001,001,008,A-0001,011,013,A-0008,005,007
发表于 2025-8-22 20:29:13 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-8-22 20:31 编辑

回复 7# guliduo

一楼对源文件的说明是 '表格内容有三列分别是文件夹名、起始页号、终止页号',对第二种操作方法的说明是 '可以直接在文件夹内只保留起始页号到终止页号之间的JPG文件,其余的都删除掉',但楼主实际测试用的 1.csv 内容是
        A-0001,001,008,A-0001,011,013,A-0008,005,007
这显然违反了以上两点说明,因此,用基于以上两点说明的4楼代码势必会产生7楼所述结果...
 楼主| 发表于 2025-8-23 03:35:05 | 显示全部楼层
回复 8# aloha20200628


    明白了,也就是说4楼代码只可作用于1.csv中文件夹名具有唯一性的情况,不可作用于重复出现多个相同文件夹名
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:05 , Processed in 0.025230 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表