中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [请教]PAK导出文件批量改名 上一主题 | 下一主题
apareon
新手上路





积分 9
发帖 7
注册 2007-8-16
状态 离线
『楼 主』:  [请教]PAK导出文件批量改名

游戏中的PAK文件导出格式为: 文件的CRC32校验码.out 例如: ui\0147E5A6.out 其中有个文件存放原始文件名list.txt,(因为发帖原因,无法看清楚,在每行列与列之间都是TAB分割,时间项(2009-6-30 15:22:1)之间为空格分隔)格式为: TotalFile:768 PakTime:2009-11-11 11:13:40 PakTimeSave:4afa2be4 CRC:3f91d323 Index ID Time FileName Size InPakSize ComprFlag CRC 0 6bf9d 2009-6-30 15:22:1 \ui\script\window\playerstate.lua 5108 1834 4 4aecede2 1 5e0d8d 2008-10-24 10:1:21 \ui\001a\window\blogviewplayer.ini 9241 1806 4 71579ab8 2 c8f97d 2009-9-23 17:50:16 \ui\001a\worldmap\npcsetting\1622.txt 109 104 4 c461871a 现在要将源文件改名为目标文件, 源文件的文件名为list.txt的最后一列的值CRC,后缀为.out, 目标文件为list.txt对应第四列的值Filename, 例如: c461871a.out 改为 \ui\001a\worldmap\npcsetting\1622.txt 我是新手,曾试图自己使用 FOR编写,但没有成功 请教各位高手,使用批处理改名,谢谢! ==========[分割线]============= 当前目录:D:\UI list.txt 第九列为源文件名(注意这里源文件名不带后缀:.out) 第五列为目标文件名 【思路】利用FOR,通过提取list.txt文件的第九列(源文件名不带后缀,4aecede2)修改为完整的源文件名(例如:D:\UI\4aecede2.out),并使用Xcopy 改名为第五列所指向的目标文件名(例如:D:\UI\ui\script\window\playerstate.lua) ==========[分割线]============= 测试记录 自己搞了个,参考下: for /f "skip=2 tokens=5,9" %i in(list.txt) do command skip=2 跳过前两行 tokens=5 取目标文件路径 tokens=9 取源文件名 command 执行命令,源文件名改为目标文件名 xcopy %i.out %j 我先去测试下... 错误:%i取到文件名,没后缀,怎么做成%i.out这样的全文件名? 2009-11-23 20:30修改测试: 批处理: for /f "skip=2 tokens=5,9" %%i in (list.txt) do set var=%%j set de=%%i 显示: set var=47f384bb set de=\script\event\zhongqiu_jieri\200809\item\canghaiyueming.lua 目前参量都可以取到,就是无法把var变量(例如:47f384bb)变为源文件名(例如:47f384bb.out) 2009-11-24 2:30修改测试: 当前目录:D:\UI 命令行运行:D:\UI>bat-out.bat out 批处理文件bat-out.bat内容: @setlocal ENABLEDELAYEDEXPANSION @cd @set pth=!cd! @set suf=%1 for /f "skip=2 tokens=5,9" %%i in (list.txt) do call out.bat %pth% %%j %suf% %%i @endlocal 批处理文件out.bat内容: xcopy /f %~dp1%~n2%~x3 %~f4 命令行回显内容: D:\UI>call out.bat D:\UI\script ddecb8c2 out \script\event\jieri\200812_xmas\item\xmas_giftbox.lua D:\UI>xcopy /f D:\UI\ddecb8c2 D:\UI\scriptevent\jieri\200812_xmas\item\xmas_giftbox.lua 找不到文件 - ddecb8c2 复制了 0 个文件 分析: CALL 批处理的时候,suf环境变量取值正确,但传递到out.bat的时候,即:传递参数%3没有成为%~x3 ,即变为文件的后缀名,所以xcopy找不到文件。 哎,自己无法解决啊,哪位高手解决下,谢谢! 2009-11-26 21:16修改测试: bat-out.bat 内容: @setlocal ENABLEDELAYEDEXPANSION @cd @set pth=!cd! @set suf=%1 for /f "skip=2 tokens=5,9" %%i in (list.txt) do @call set src="%pth%\%%j.%%1" &&@call set des="%pth%%%i" &&@call out.bat %%src%% %%des%% @endlocal out.bat内容: xcopy /f %~dpnx1 %~dpnx2 命令行运行:bat-out.bat out 屏幕回显: D:\UI>xcopy /f D:\UI\script\78F8C5ED.out D:\UI\script\script\task\target\usertrackinfo.lua 目标 D:\UI\script\script\task\target\usertrackinfo.lua 是文 件名 还是目录名 (F = 文件,D = 目录)? f D:\U-Disk\TMP\JXSJ_Pak\out\script\78F8C5ED.out -> D:\U-Disk\TMP\JXSJ_Pak\out\scr ipt\script\task\target\usertrackinfo.lua 复制了 1 个文件 分析: out.bat的参数传递有问题。 通过修改out.bat为回显参数: @echo bgin @echo %~1 @echo , @echo %~2 屏幕显示正确传递,但现在参数变量的格式不正确。即:不能将%1、%2传递参数设置为Xcopy 正确的源文件,目标文件 官方解释为: 说明 目标的默认值 如果省略目标,xcopy 命令将文件复制到当前目录。 指定目标是文件还是目录 如果目标不包含现存的目录,并且不以反斜杠 (\) 结尾,xcopy 将显示下列格式的提示消息: Does destination specify a file name or directory name on the target (F = file, D = directory)? 如果要将一个或多个文件复制到一个文件,请按 F。如果要将一个或多个文件复制到一个目录,请按 D。 使用 /i 开关可以避免该提示。如果使用了 /i 开关,如果源是多个文件或目录,xcopy 将假定目标为目录。 [ Last edited by apareon on 2009-11-28 at 13:51 ]


2009-11-22 15:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
apareon
新手上路





积分 9
发帖 7
注册 2007-8-16
状态 离线
『第 2 楼』:  

没人回答 ?是因为我是新手吗 ?


2009-11-25 13:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 3 楼』:  

现在要将源文件改名为目标文件, 源文件的文件名为list.txt的最后一列,后缀为.out, 目标文件为list.txt对应最后一列值的Filename,
源文件和目标文件都为最后一列,你不是玩人吗!!!???


2009-11-25 14:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
apareon
新手上路





积分 9
发帖 7
注册 2007-8-16
状态 离线
『第 4 楼』:  

Originally posted by moniuming at 2009-11-25 02:09 PM: 源文件和目标文件都为最后一列,你不是玩人吗!!!???
抱歉,笔误,已经改过来了。


2009-11-26 18:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 5 楼』:  

唉,没有牛人给你解答,本菜菜就试试吧,其实你已经不是新手了...
@echo off
::要放在d:\ui目录下运行...
for /f "skip=2 tokens=5,9" %%a in ('type list.txt') do (
  echo.copy /y "%%b.out" "d:\%%a"
  rem 如果显示符合要求,把上面的"echo."去掉即可
)
pause


2009-11-26 23:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
apareon
新手上路





积分 9
发帖 7
注册 2007-8-16
状态 离线
『第 6 楼』:  

回复第5楼: 首先谢谢你的帮助! 弱弱的问个问题:我自己写的FOR,do后面的英文括号"(",")"报错,不知道你们的括号怎么能用上 ? 运行了但提示出错: 系统找不到指定的路径。 已复制 0 个文件。 我记得copy指定的目标文件路径必须存在,就是说:目标目录不能新建 我更换为xcopy /y,提示不能识别目标为目录还是文件,错误提示如下: 目标 D:\UI\script\event\huihuangguo\huihuangguo_C.lua 是文件名 还是目录名 (F = 文件,D = 目录)? [ Last edited by apareon on 2009-11-28 at 13:49 ]


2009-11-28 13:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 7 楼』:  

好像没有这个参数,加个"echo f|"吧...
@echo off
::要放在d:\ui目录下运行...
for /f "skip=2 tokens=5,9" %%a in ('type list.txt') do (
  echo f|xcopy /f /e /y "edkdi.txt" "d:\%%a"
)
pause
[ Last edited by moniuming on 2009-11-29 at 18:44 ]


2009-11-29 18:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: