[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

评分人数

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

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

TOP

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

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

评分人数

TOP

本帖最后由 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. )
复制代码
测试代码之前请做好备份

TOP

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

TOP

回复 3# buyiyang

谢谢,原因分析到位,代码完美!中文感叹号可以更改成功。

TOP

回复 4# ShowCode
4楼说的很清楚,你的代码重命名少写了扩展名
ren "!oldname!%%~xi" "!NewName!%%~xi"

TOP

回复 5# qixiaobin0715
谢谢!这个思路也挺好。

TOP

回复 7# meiszp


    是的,已修复。
测试代码之前请做好备份

TOP

返回列表