|
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 楼』:
Quote: | 现在要将源文件改名为目标文件,
源文件的文件名为list.txt的最后一列,后缀为.out,
目标文件为list.txt对应最后一列值的Filename, |
|
源文件和目标文件都为最后一列,你不是玩人吗!!!???
|
|
2009-11-25 14:09 |
|
|
apareon
新手上路
积分 9
发帖 7
注册 2007-8-16
状态 离线
|
『第
4 楼』:
Quote: | 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 |
|