Board logo

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

作者: a6236130    时间: 2018-7-6 19:43     标题: [已解决]批处理:重命名脚本所在目录下所有文件夹的文件名

本帖最后由 a6236130 于 2018-7-8 20:42 编辑

1.将脚本所在目录下的每个文件夹里的文件重新从001开始往后重命名
2.文件格式:jpg  tif
求具体代码……
作者: yhcfsr    时间: 2018-7-6 21:29

本帖最后由 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
复制代码

作者: Batcher    时间: 2018-7-6 22:54

回复 2# yhcfsr


    第3行n从1000开始,可以把第7行的补0操作省略掉。
作者: yhcfsr    时间: 2018-7-6 23:42

本帖最后由 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
复制代码

作者: a6236130    时间: 2018-7-7 23:55

回复 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


我这个是否可行?有没有什么没注意到的问题
作者: Batcher    时间: 2018-7-8 00:09

回复 6# a6236130


    call命令用的太多会导致代码执行效率较低
作者: codegay    时间: 2018-7-8 05:25



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)
复制代码

作者: luckcsz    时间: 2018-7-14 11:43

本帖最后由 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

是这样吗?
作者: yhcfsr    时间: 2018-7-14 12:56

回复 9# luckcsz
如果是0001,你的修改没有错
作者: luckcsz    时间: 2018-7-14 21:15

回复 10# yhcfsr


    谢谢
作者: luckcsz    时间: 2018-7-14 21:16

回复 10# yhcfsr


   里面文件最多是0001-9999就那样修改吗?
作者: hulilala    时间: 2018-7-15 14:20

学习了~ 字数补丁
作者: luckcsz    时间: 2018-7-16 11:17

本帖最后由 luckcsz 于 2018-7-16 11:20 编辑

回复 10# yhcfsr

能不能是父文件夹下所有子文件及子文件夹下jpg、tif文件格式全部能运行~!
父文件夹\子文件夹\子文件夹 全部能自行修改
有时间请帮忙看下
作者: yhcfsr    时间: 2018-7-16 12:47

本帖最后由 yhcfsr 于 2018-7-16 12:49 编辑

回复 14# luckcsz


   你的意思是不是,所有文件采用一次性累加编码,而不是每个目录都进行重新从0001开始??
   你这种连续性追问的,最好去论坛QQ群里问。
作者: luckcsz    时间: 2018-7-16 12:56

本帖最后由 luckcsz 于 2018-7-16 12:59 编辑

回复 15# yhcfsr


    好的,能不能先把这次帮忙解决下,谢谢~!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2