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

[文本处理] [已解决]批处理如何获取文件夹中以数字命名序号最大的txt文本?

[复制链接]
发表于 2015-7-20 03:45:49 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-11 10:25 编辑

各位老师;我有很多文件夹中的文档是用数字命名的,我想用批处理把毎个文件夹中数字命名最大的txt文本另存,如以下需求示例;

示例;   在d:\A文件\1.txt、2.txt……59.txt中,59.txt就是命名数字序号最大的文档。
需求;   把59.txt文档复制到d:\B文件\59.txt

          度娘半天无果特求助,谢谢大家!
发表于 2015-7-20 11:12:09 | 显示全部楼层
本帖最后由 aa77dd@163.com 于 2015-7-20 11:14 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. if not exist "BAK" md "BAK"
  3. set "dttm=%date:/=_%%time:~0,2%%time:~3,2%%time:~6,2%"
  4. md "BAK\%dttm%"
  5. for /f "delims=" %%i in ('dir /b /s *.txt^&echo;0') do (
  6.     for %%a in ("%%i\..\..") do if /i "%%~na" neq "BAK" (
  7.         if "%%~spi" neq "!lastdir!" (
  8.             if "!lastdir!!max!" neq "" (
  9.                 echo copy "!lastdir!!max!.txt" "BAK\%dttm%\!lastdir:\=_!!max!.txt"
  10.                 copy "!lastdir!!max!.txt" "BAK\%dttm%\!lastdir:\=_!!max!.txt"
  11.             )
  12.             set "max=0"
  13.         )
  14.         set /a "t=max-%%~ni>>31, max = t&%%~ni|~t&max"
  15.         set "lastdir=%%~spi"
  16.     )
  17. )
  18. pause
复制代码
把批处理文件放在总目录中运行
在总目录中会建立一个 BAK 的目录, 用于存放 备份的文件,  每一次运行 都会在 BAK 下建立一个当前时间命名的新目录, 然后在其中存放备份的文件
为避免备份时重名文件的覆盖问题,  备份的文件都带有一个原始短路径的前缀
 楼主| 发表于 2015-7-20 17:43:02 | 显示全部楼层
谢谢!aa77dd@163.com老师,代码比我预期的还好!
发表于 2018-8-22 11:33:21 | 显示全部楼层
回复 2# aa77dd@163.com


    老师您好,我有个问题解决不了,和这个问题很相似,想请您指点一下。

我有
a1/b1/文件若干.jpg
a2/b2/文件若干.jpg
...
其中,每个文件夹下文件若干,是以数字序号排序的,比如0188,0189,0190这样

这种结构下,想把每个文件夹下的的文件中序号最大的那个文件改名为xxx

请老师指教
发表于 2018-8-22 13:14:56 | 显示全部楼层
回复 4# bataiping


执行代码之前注意做好文件备份
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /d %%a in ("*") do (
  4.     for /d %%b in ("%%a\*") do (
  5.         set "LastFile="
  6.         for /f "delims=" %%c in ('dir /b /a-d "%%b\*.jpg"') do (
  7.             set "LastFile=%%c"
  8.         )
  9.         ren "%%b\!LastFile!" "xxx.jpg"
  10.     )
  11. )
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 十年如一日,站长辛苦了

查看全部评分

发表于 2018-8-22 20:52:22 | 显示全部楼层
回复 5# Batcher

完美的解决了我的问题,向您致谢
发表于 2018-8-22 21:10:05 | 显示全部楼层
回复 5# Batcher

感觉看不太懂,没看出来用什么参数排的序

请问,如果想在此基础上,将每个文件夹内其他的文件(不是最大的那些)全部删除,该怎么增加这个命令呢
发表于 2018-8-22 21:38:01 | 显示全部楼层
回复 7# bataiping


    dir会默认排序的

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 十年如一日,站长辛苦了

查看全部评分

发表于 2018-8-22 23:34:56 | 显示全部楼层
回复 8# Batcher

目的:将每个底层文件夹下的编号最大的tif图片文件名位数+5,并将改动过名称的图像按照原有层级提取到文件夹“更改后”里,写法如下:

@echo off
setlocal enabledelayedexpansion
for /d %%a in ("*") do (
    for /d %%b in ("%%a\*") do (
::将LastFile定义为文件中的最大值
        set "LastFile="
        for /f "delims=" %%c in ('dir /b /a-d "%%b\*.tif"') do (
::使用~n去掉后缀名(便于计算,这里不知道如果没有去掉后缀名可不可以用set /a计算,不过懒得去测试了)
            set "LastFile=%%~nc"
        )
::将LastFile2定义为文件中的最大值+5
        set /a LastFile2=!LastFile!+5
::重命名
        ren "%%b\!LastFile!.tif" "!LastFile2!.tif"
::建立临时文件存放文件夹.\更改后
if not exist ".\更改后\%%b\" (md ".\更改后\%%b\")
::复制文件并重命名
copy "%%b\!LastFile2!.tif" ".\更改后\%%b\"!LastFile2!.tif"

    )
)

pause


测试了一小批数据似乎没有问题了,但是因为实际操作数据量很大,怕到时候出了问题检查不出来,所以请老师帮我看看代码有没有硬伤
发表于 2018-8-22 23:43:42 | 显示全部楼层
其实应该是按照原有层级提取出最后一个文件,再改名+5

这样,提取前的图像命名就没有改变,一定程度上能规避很多误操作带来的错误
发表于 2018-8-23 08:29:36 | 显示全部楼层
回复 10# bataiping


    那就把copy和ren调整一下先后顺序

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 十年如一日,站长辛苦了

查看全部评分

发表于 2018-8-23 08:31:43 | 显示全部楼层
回复 9# bataiping


set /a LastFile2=!LastFile!+5
这里需要注意几点:
1. 数字不能以0开头,否则会被按照八进制来计算。
2. 数字位数不能太多,否则会超出计算范围。

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 十年如一日,站长辛苦了

查看全部评分

发表于 2018-8-23 08:32:37 | 显示全部楼层
注释推荐使用 rem 尽量少用 ::

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 十年如一日,站长辛苦了

查看全部评分

发表于 2018-8-23 08:36:26 | 显示全部楼层
回复 13# Batcher

那我不知道怎么改了,我的图像名称都是0开头的,0001-0999之间,昨天测试的时候没使用真实数据

请您再给点指导意见。
发表于 2018-8-23 09:34:32 | 显示全部楼层
回复 14# bataiping


set /a LastFile2=1!LastFile!+5
ren "%%b\!LastFile!.tif" "!LastFile2:~-4!.tif"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 17:42 , Processed in 0.022866 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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