[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程批处理在线视频分享
返回列表 发帖

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

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

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

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

TOP

回复 2# yhcfsr


    第3行n从1000开始,可以把第7行的补0操作省略掉。
【扫描二维码捐助论坛的朋友请留言注明论坛账号】http://bbs.bathome.net/thread-10403-1-1.html
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

TOP

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

评分人数

QQ 33892006

TOP

现在伸手党都这么受欢迎的吗?
争着抢着答?

TOP

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


我这个是否可行?有没有什么没注意到的问题

TOP

回复 6# a6236130


    call命令用的太多会导致代码执行效率较低
【扫描二维码捐助论坛的朋友请留言注明论坛账号】http://bbs.bathome.net/thread-10403-1-1.html
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

TOP

:lol

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)
复制代码
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

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

是这样吗?

TOP

回复 9# luckcsz
如果是0001,你的修改没有错
QQ 33892006

TOP

回复 10# yhcfsr


    谢谢

TOP

回复 10# yhcfsr


   里面文件最多是0001-9999就那样修改吗?

TOP

学习了~ 字数补丁

TOP

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

回复 10# yhcfsr

能不能是父文件夹下所有子文件及子文件夹下jpg、tif文件格式全部能运行~!
父文件夹\子文件夹\子文件夹 全部能自行修改
有时间请帮忙看下

TOP

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

回复 14# luckcsz


   你的意思是不是,所有文件采用一次性累加编码,而不是每个目录都进行重新从0001开始??
   你这种连续性追问的,最好去论坛QQ群里问。
QQ 33892006

TOP

返回列表