Board logo

标题: [文件操作] 【已解决】批处理重命名文件不成功,求原因? [打印本页]

作者: meiszp    时间: 2024-7-31 17:08     标题: 【已解决】批处理重命名文件不成功,求原因?

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

作者: jyswjjgdwtdtj    时间: 2024-7-31 17:30

是不是如“结构仿真!准吗? .html”这几个文件文件名长度不足20?而且看上去你的代码不管文件名里有没有日期都会删掉后二十个字符
作者: buyiyang    时间: 2024-7-31 18:30

本帖最后由 buyiyang 于 2024-7-31 18:31 编辑

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

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

作者: qixiaobin0715    时间: 2024-8-1 09:05

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

作者: meiszp    时间: 2024-8-1 11:07

回复 3# buyiyang

谢谢,原因分析到位,代码完美!中文感叹号可以更改成功。
作者: meiszp    时间: 2024-8-1 11:09

回复 4# ShowCode
4楼说的很清楚,你的代码重命名少写了扩展名
ren "!oldname!%%~xi" "!NewName!%%~xi"
作者: meiszp    时间: 2024-8-1 11:19

回复 5# qixiaobin0715
谢谢!这个思路也挺好。
作者: ShowCode    时间: 2024-8-2 08:28

回复 7# meiszp


    是的,已修复。




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