梦中情萱 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日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改