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

[文件操作] 【已解决】批处理重命名文件不成功,求原因?

[复制链接]
发表于 2024-7-31 17:08:37 | 显示全部楼层 |阅读模式
本帖最后由 meiszp 于 2024-8-1 11:20 编辑

批处理删除文件后的时间重命名文件,但有4个重命名不成功,求原因,修改代码。
谢谢!
  1. for /f "delims=" %%i in ('dir /b /a-d *.html') do (
  2.     set "OldName=%%~ni"
  3.     REM 删除文件名的后20位
  4.     set "NewName=!OldName:~0,-20!"
  5.     ren "%%i" "!NewName!%%~xi"
复制代码

评分

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

查看全部评分

发表于 2024-7-31 17:30:48 | 显示全部楼层
是不是如“结构仿真!准吗? .html”这几个文件文件名长度不足20?而且看上去你的代码不管文件名里有没有日期都会删掉后二十个字符
发表于 2024-7-31 18:30:12 | 显示全部楼层
本帖最后由 buyiyang 于 2024-7-31 18:31 编辑

原因:文件名中有变量引用符英文感叹号。
解决方法:第二行的setlocal enabledelayedexpansion移到第4行下,
再在第7行下添加endlocal,第7行的%%i改成!oldname!%%~xi。

评分

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

查看全部评分

发表于 2024-7-31 22:15:30 | 显示全部楼层
本帖最后由 ShowCode 于 2024-8-2 08:28 编辑

回复 1# meiszp
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d *.html') do (
  3.     set "OldName=%%~ni"
  4.     setlocal enabledelayedexpansion
  5.     REM 删除文件名的后20位
  6.     set "NewName=!OldName:~0,-20!"
  7.     ren "!OldName!%%~xi" "!NewName!%%~xi"
  8.     endlocal
  9. )
复制代码
发表于 2024-8-1 09:05:01 | 显示全部楼层
回复 1# meiszp
如果文件名中只有最后面位置的一对英文括号,可不用变量延迟开关,也能避免英文叹号的影响:
  1. @echo off
  2. for /f "tokens=1* delims=(" %%i in ('dir /b /a-d "*(*).html"') do (
  3.     ren "%%i(%%j" "%%i.html"
  4. )
复制代码
 楼主| 发表于 2024-8-1 11:07:34 | 显示全部楼层
回复 3# buyiyang

谢谢,原因分析到位,代码完美!中文感叹号可以更改成功。
 楼主| 发表于 2024-8-1 11:09:57 | 显示全部楼层
回复 4# ShowCode
4楼说的很清楚,你的代码重命名少写了扩展名
ren "!oldname!%%~xi" "!NewName!%%~xi"
 楼主| 发表于 2024-8-1 11:19:21 | 显示全部楼层
回复 5# qixiaobin0715
谢谢!这个思路也挺好。
发表于 2024-8-2 08:28:50 | 显示全部楼层
回复 7# meiszp


    是的,已修复。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 22:07 , Processed in 0.016741 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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