中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助:有关多级路径文件重命名问题,卡在变量使用
作者:
标题: 求助:有关多级路径文件重命名问题,卡在变量使用 上一主题 | 下一主题
lsh1611
初级用户





积分 80
发帖 27
注册 2007-4-27
来自 BJ
状态 离线
『楼 主』:  求助:有关多级路径文件重命名问题,卡在变量使用

有这样的列表文件:list.txt

E4333A0ED8189CD2A35CF9F5E3CE4E4C  E:\!MD5-Test\collection\V\xgt9h1.dll
FE4E944898E2D8F54C44EC5469AF21FE  E:\!MD5-Test\collection\V\zxdoor0.dll
6A69C2CF90D56940CF8C44FD2AFA9109  E:\!MD5-Test\collection\V\yywf\ccaj.ini
69CC5AC465F4C973A5360C8403399193  E:\!MD5-Test\collection\V\yywf\eecl.dll

前面是文件md5,后面是全路经文件名(路径深度不定)。
要将所列文件名改为:md5(原文件)。

坛子上查了若干贴,制作如下:

for /f "tokens=1*" %%a in (list.txt) do (
  set "patch1=%%b"
  call :GetFdName "%%b"
  ren %%patch1 %%a(%%b)
)

:GetFdName
   for /f "delims=\ tokens=1,*" %%i in ("%~1") do (
       if "%%j"=="" echo %%i & goto :eof
       call :GetFdName "%%j"
)


目前总是变量pathch1的值不对,patch1是临时存放全路经文件名的。不知哪里错误,可能是低级错误。有劳哪位帮忙看看!

[ Last edited by lsh1611 on 2007-11-1 at 05:26 PM ]

2007-11-1 17:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 2 楼』:  


@echo off
for /f "tokens=1*" %%i in (list.txt) do (
  ren "%%j" "%%i(%%~ni)%%~xi"
)


2007-11-1 17:36
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
lsh1611
初级用户





积分 80
发帖 27
注册 2007-4-27
来自 BJ
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by abcd at 2007-11-1 05:36 PM:
@echo off
for /f "tokens=1*" %%i in (list.txt) do (
  ren "%%j" "%%i(%%~ni)%%~xi"
)

感激+佩服,有点小错误:

for /f "tokens=1*" %%i in (list.txt) do (
  ren "%%j" "%%i(%%~nj)%%~xi"
)

但改名后,后缀名不见了...  %%~n  和 %%~X  一直没明白什么意思。

2007-11-1 18:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 4 楼』:  

不好意思,手误了

把变量%%j写成了%%i了,再测试一下?
@echo off
for /f "tokens=1*" %%i in (list.txt) do (
  ren "%%j" "%%i(%%~nj)%%~xj"
)


2007-11-1 18:06
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
lsh1611
初级用户





积分 80
发帖 27
注册 2007-4-27
来自 BJ
状态 离线
『第 5 楼』:  

的确可以了!再次感谢。

明白了%%~n  %%~x的含义。

最终代码:
for /f "tokens=1*" %%a in (list.txt) do  ren "%%b" "%%a(%%~nb%%~xb)

但对于包含空格的文件则会改名失败。一直对这种情况比较头疼。

[ Last edited by lsh1611 on 2007-11-2 at 09:46 AM ]

2007-11-2 09:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 6 楼』:  

如楼主这样,不是连扩展名都改了??

包含空格的文件用引号引上就可以了

2007-11-2 10:25
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: