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

[文件操作] [已解决]批处理:重命名脚本所在目录下所有文件夹的文件名

[复制链接]
发表于 2018-7-6 19:43:26 | 显示全部楼层 |阅读模式
本帖最后由 a6236130 于 2018-7-8 20:42 编辑

1.将脚本所在目录下的每个文件夹里的文件重新从001开始往后重命名
2.文件格式:jpg  tif
求具体代码……

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2018-7-6 21:29:13 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-7-6 23:52 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir/ad/s/b') do (
  3.         set/a "n=0"
  4.         pushd "%%a"
  5.         for /f "delims=" %%b in ('dir/a-d/b') do (
  6.                 set/a "n+=1"
  7.                 set "count=00!n!"
  8.                 set "count=!count:~-3!"
  9.                 ren "%%b" "!count!%~xb"
  10.         )
  11.         popd
  12. )
  13. pause
复制代码
发表于 2018-7-6 22:54:51 | 显示全部楼层
回复 2# yhcfsr


    第3行n从1000开始,可以把第7行的补0操作省略掉。
发表于 2018-7-6 23:42:19 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-7-6 23:58 编辑

回复 3# Batcher


是的,没有考虑多余999个文件的情况,如果单个目录文件达到1000个以上,代码的中的补0操作就不适用.
所以,请题主注意,如果出现上述情况,需要对补0操作加个判定语句.
下面稍微改下代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir/ad/s/b') do (
  3.         set/a "n=0"
  4.         pushd "%%a"
  5.         for /f "delims=" %%b in ('dir/a-d/b') do (
  6.                 set/a "n+=1"
  7.                 set "count=!n!"
  8.                 if !n! lss 100 (
  9.                         set "count=00!count!"
  10.                         set "count=!count:~-3!"
  11.                 )
  12.                 ren "%%b" "!count!%%~xb"
  13.         )
  14.         popd
  15. )
  16. pause
复制代码

评分

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

查看全部评分

 楼主| 发表于 2018-7-7 23:55:43 | 显示全部楼层
回复 3# Batcher


    @echo off

set Ext=*.jpg,*.tif

for /d %%a in (*) do (

    pushd "%%~a"

    call set Num=1000

    for /f "delims=" %%i in ('dir /a-d/b %Ext%') do (

        call set /a Num+=1

        call ren "%%~i" "%%Num:~1%%%%~xi"

    )

    popd

)

pause


我这个是否可行?有没有什么没注意到的问题
发表于 2018-7-8 00:09:25 | 显示全部楼层
回复 6# a6236130


    call命令用的太多会导致代码执行效率较低
发表于 2018-7-8 05:25:51 | 显示全部楼层


nim语言版。反正也不会有人用。看看就好。
  1. import os
  2. import strformat
  3. import strutils

  4. var extlist = [".jpg", ".gif", ".tif"]
  5. var counter = 0

  6. for f in walkDirRec(getAppDir()):
  7.     var (dir, name, ext) = splitFile(f)
  8.     if ext.toLower in extlist:
  9.         counter.inc
  10.         var newname = fmt"{dir}/{counter:03}{ext}"
  11.         echo f, "  ===>>: ", newname
  12.         moveFile(f, newname)
复制代码
发表于 2018-7-14 11:43:45 | 显示全部楼层
本帖最后由 luckcsz 于 2018-7-14 11:47 编辑

回复 4# yhcfsr


    1.将脚本所在目录下的每个文件夹里的文件重新从0001开始往后重命名
    2.文件格式:jpg  tif

  @echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir/ad/s/b') do (
        set/a "n=0"
        pushd "%%a"
        for /f "delims=" %%b in ('dir/a-d/b') do (
                set/a "n+=1"
                set "count=!n!"
                if !n! lss 100 (     这个100是不是是1000?
                        set "count=00!count!"  这个00是不是是000?
                        set "count=!count:~-3!"  这个3改成4?
                )
                ren "%%b" "!count!%%~xb"
        )
        popd
)
pause

是这样吗?
发表于 2018-7-14 12:56:46 | 显示全部楼层
回复 9# luckcsz
如果是0001,你的修改没有错
发表于 2018-7-14 21:15:30 | 显示全部楼层
回复 10# yhcfsr


    谢谢
发表于 2018-7-14 21:16:31 | 显示全部楼层
回复 10# yhcfsr


   里面文件最多是0001-9999就那样修改吗?
发表于 2018-7-15 14:20:40 | 显示全部楼层
学习了~ 字数补丁
发表于 2018-7-16 11:17:48 | 显示全部楼层
本帖最后由 luckcsz 于 2018-7-16 11:20 编辑

回复 10# yhcfsr

能不能是父文件夹下所有子文件及子文件夹下jpg、tif文件格式全部能运行~!
父文件夹\子文件夹\子文件夹 全部能自行修改
有时间请帮忙看下
发表于 2018-7-16 12:47:34 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-7-16 12:49 编辑

回复 14# luckcsz


   你的意思是不是,所有文件采用一次性累加编码,而不是每个目录都进行重新从0001开始??
   你这种连续性追问的,最好去论坛QQ群里问。
发表于 2018-7-16 12:56:18 | 显示全部楼层
本帖最后由 luckcsz 于 2018-7-16 12:59 编辑

回复 15# yhcfsr


    好的,能不能先把这次帮忙解决下,谢谢~!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 13:09 , Processed in 0.023921 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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