梦中情萱 2023-02-19 13:52 采纳率: 63.9%
浏览 75
已结题

如何使用批处理批量截短文件名?

我的某个目录里下(当前目录)有很多文件,有些文件名太长了
由于没学过batch ,来当伸手党了,顺便学习,谢谢!

求一个脚本,在当前目录执行,将目录下所有文件名长度超过20的,取前15位重命名。
如果某个文件前15位仍有重复,则按照每个文件 _1,_2,_3依次排列
比如a_1,a_2,b_1,b_2这样。

研究了半天,嵌套循环写不明白……,外层用for遍历每个文件。
内层循环我想要使用while,结果被告知必须用goto ,可是每当我用goto ,又会跳出外层循环,麻烦提供一个脚本,感谢!

  • 写回答

5条回答 默认 最新

  • 四海一叶秋 2023-02-19 16:50
    关注
    @echo off
    setlocal enabledelayedexpansion
    cd /d "%~dp0"
    for %%i in (*) do (
        set "name=%%~ni"
        set "ext=%%~xi"
        if "!name:~20!" neq "" (
            set "newname=!name:~0,15!"
            set "num=1"
            if not exist "!newname!!ext!" (
                ren "%%i" "!newname!!ext!"
            ) else (
                call :check_name
                ren "%%i" "!newname!_!num!!ext!"
            )
        )
    )
    pause&exit
    
    :check_name
     if exist "!newname!_!num!!ext!" (
                set /a "num+=1"
                call :check_name
            )
    goto :eof
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月27日
  • 已采纳回答 2月19日
  • 创建了问题 2月19日

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用