![]() |
China DOS Union-- Unite DOS · Advance DOS · Grow DOS --Union site: www.cn-dos.net Forum site: www.cn-dos.net/forum |
| Guest | Log in | Register | Members | Search | China DOS Union |
|
中国DOS联盟论坛 The time now is 2026-08-12 19:38 |
47,811 topics / 349,897 posts / today 0 new / 48,256 members |
| DOS批处理 & 脚本技术(批处理室) » [Ask for Advice]Batch Renaming of PAK Exported Files |
| Printable Version 1,681 / 6 |
| Floor1 apareon | Posted 2009-11-22 15:15 |
| 新手上路 Posts 7 Credits 9 | |
|
The export format of PAK files in the game is:
The CRC32 checksum of the file.out For example: ui\0147E5A6.out There is a file storing the original file name list.txt, (due to the post reason, it is not clear, between each column in each row is TAB separated, and between the time items (2009-6-30 15:22:1) is space separated) The format is: 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 Now we need to rename the source file to the target file. The file name of the source file is the value of the last column of list.txt, which is CRC, with the suffix.out. The target file is the value of the fourth column, Filename, in list.txt. For example: c461871a.out is renamed to \ui\001a\worldmap\npcsetting\1622.txt I'm a newbie and tried to write it with FOR myself but didn't succeed. Please ask the experts, and use batch processing to rename, thank you! ======================= Current directory: D:\UI list.txt The ninth column is the source file name (note that the source file name here does not have the suffix:.out) The fifth column is the target file name 【Idea】Use FOR, extract the ninth column (source file name without suffix, 4aecede2) in the list.txt file, modify it to the complete source file name (for example: D:\UI\4aecede2.out), and use Xcopy to rename it to the target file name pointed to by the fifth column (for example: D:\UI\ui\script\window\playerstate.lua) ======================= Test record I did it myself, for reference: for /f "skip=2 tokens=5,9" %i in(list.txt) do command skip=2 Skip the first two lines tokens=5 Take the target file path tokens=9 Take the source file name command Execute the command, rename the source file name to the target file name xcopy %i.out %j I'll go test it... Error: %i gets the file name, without the suffix, how to make it %i.out like the full file name? 2009-11-23 20:30 modification test: Batch processing: for /f "skip=2 tokens=5,9" %%i in (list.txt) do set var=%%j set de=%%i Display: set var=47f384bb set de=\script\event\zhongqiu_jieri\200809\item\canghaiyueming.lua Currently, the parameters can be obtained, but the var variable (for example: 47f384bb) cannot be changed to the source file name (for example: 47f384bb.out) 2009-11-24 2:30 modification test: Current directory:D:\UI Command line operation:D:\UI>bat-out.bat out Content of batch processing file 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 Content of batch processing file out.bat: xcopy /f %~dp1%~n2%~x3 %~f4 Command line echo content: 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 File not found - ddecb8c2 0 file(s) copied Analysis: When CALL batch processing, the suf environment variable value is correct, but when passed to out.bat, that is: the passed parameter %3 does not become %~x3, that is, it becomes the suffix of the file, so xcopy cannot find the file. Hey, I can't solve it myself, please help me, thank you! 2009-11-26 21:16 modification test: Content of 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 Content of out.bat: xcopy /f %~dpnx1 %~dpnx2 Command line operation: bat-out.bat out Screen echo: D:\UI>xcopy /f D:\UI\script\78F8C5ED.out D:\UI\script\script\task\target\usertrackinfo.lua Target D:\UI\script\script\task\target\usertrackinfo.lua is a file name Or a directory name (F = file, D = directory)? 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 file(s) copied Analysis: There is a problem with the parameter passing of out.bat. By modifying out.bat to echo parameters: @echo bgin @echo %~1 @echo , @echo %~2 The screen displays correct passing, but now the format of the parameter variable is incorrect. That is, the %1, %2 passed parameters cannot be set to the correct source file and target file for Xcopy. Official explanation: Description Default value for destination If destination is omitted, the xcopy command copies files to the current directory. Specify whether destination is a file or directory If destination does not contain an existing directory and does not end with a backslash (\), the xcopy command displays a prompt message in the following format: Does destination specify a file name or directory name on the target (F = file, D = directory)? Press F if you want to copy one or more files to a file. Press D if you want to copy one or more files to a directory. The /i switch can be used to avoid this prompt. If the /i switch is used, xcopy assumes the destination is a directory if the source is one or more files or directories. [ Last edited by apareon on 2009-11-28 at 13:51 ] |
|
| Floor2 apareon | Posted 2009-11-25 13:33 |
| 新手上路 Posts 7 Credits 9 | |
|
No one answers? Is it because I'm a newbie?
|
|
| Floor3 moniuming | Posted 2009-11-25 14:09 |
| 银牌会员 Posts 574 Credits 1,335 From 广西 | |
Now we need to rename the source file to the target file. The source file and the target file are both the last column. Are you kidding me!!!??? |
|
| Floor4 apareon | Posted 2009-11-26 18:59 |
| 新手上路 Posts 7 Credits 9 | |
Originally posted by moniuming at 2009-11-25 02:09 PM: Sorry, it was a typo, and it has been corrected. |
|
| Floor5 moniuming | Posted 2009-11-26 23:48 |
| 银牌会员 Posts 574 Credits 1,335 From 广西 | |
|
Hey, no expert is here to answer for you, so this newbie will give it a try. Actually, you're not a newbie anymore...
|
|
| Floor6 apareon | Posted 2009-11-28 13:41 |
| 新手上路 Posts 7 Credits 9 | |
|
Reply to post 5:
First of all, thank you for your help! 弱弱的 ask a question: The English parentheses "(" and ")" after do in the FOR I wrote are giving an error. I don't know how you can use the parentheses? It ran but prompted an error: The system cannot find the specified path. 0 files copied. I remember that the target file path specified by copy must exist, that is, the target directory cannot be newly created I replaced it with xcopy /y, and it prompted that it cannot recognize whether the target is a directory or a file. The error prompt is as follows: The target D:\UI\script\event\huihuangguo\huihuangguo_C.lua Is it a file name Or a directory name (F = file, D = directory)? [ Last edited by apareon on 2009-11-28 at 13:49 ] |
|
| Floor7 moniuming | Posted 2009-11-29 18:02 |
| 银牌会员 Posts 574 Credits 1,335 From 广西 | |
|
It seems there is no this parameter, add "echo f|"...
[ Last edited by moniuming on 2009-11-29 at 18:44 ] |
|
|
[ Contact the Union admin team -
中国DOS联盟 -
Standard version ] Sponsored by ifanr Inc | © 2001–2023 |