标题: [代码合集] BAT调用rar解压及里面txt文本处理连同运行为何出错? [打印本页]
作者: kswdiy 时间: 2013-1-5 09:38 标题: BAT调用rar解压及里面txt文本处理连同运行为何出错?
我写个了一个 关于一个 rar压缩包里面文件 解包的批处理
批量处理当前目录下的rar文件
根据对应的rar文件名 建立对应的文件夹
将*.pak、*.man.*.bin文件 解压到对应文件夹下 的PAKS文件夹下
*.txt解压出来的文件全部 都导出到以 rar文件名的一个 txt文本文件
具体书写模式为:rar文件名_说明.txt
现在最主要的 就是有些 rar文件里面 txt文本是 UTF_8格式的
我批处理里面就是 对一个特定文件名 ALI213.txt
进行转化为 ansi编码后 再 统一导入到
rar文件名_说明.txt 文件中去
问题:
现在这个批处理可以完美解包并处理 ALI213.txt 为ansi编码
在到处入到 rar文件名_说明.txt 文件中去
然后除了 ALI213.txt以外的ansi编码txt文件都导入到
rar文件名_说明.txt 文件中去
但是我写代码不能批量处理 本批处理所有 rar文件
只能修改使用dir命令出来第一个 rar文件路径来处理
求大大帮我修正可以处理全部的rar
并且txt文件都合并为一个
rar文件名_说明.txt 文件中去
具体问题所在 for语段在:
for /f "usebackq delims=" %%I in (`dir /b/s/on "%~dp0*.rar"`) do (
大家可以搜索跳转查看和修改
因为 论坛里面会弄我这个代码的没几个
而且时间很不固定
还不知道啥时候能帮我解决
本想找人解决的
但是batman想给论坛弄点气氛
所以就按照他说的发帖子了
希望大家能尽快帮我解决 呵呵
谢谢诶了
作者: BAT-VBS 时间: 2013-1-5 14:51
听谁说的?
本来打算找谁?他怎么还不来啊?对了顺便问问你打算给那个人多少钱啊,如果价钱合适我可以帮你搞定。
作者: apang 时间: 2013-1-5 15:57
本帖最后由 apang 于 2013-1-5 16:35 编辑
没楼主说的那么夸张的吧?
WinRAR路径检测貌似有问题呀,我的是HKEY_CURRENT_USER\Software\WinRAR
for循环中用goto的话再也回不来了。。。
install程序段:- @echo off
- :install
- cls
-
- for /f "delims=" %%I in ('dir /b/s/on *.rar') do (
- "%RarPath%" x -y -ibck "%%I" *.txt "%%~nI\PAKS\"
- "%RarPath%" x -y -ibck "%%I" *.man "%%~nI\PAKS\"
- "%RarPath%" x -y -ibck "%%I" *.pak "%%~nI\PAKS\"
- "%RarPath%" x -y -ibck "%%I" *.bin "%%~nI\PAKS\"
- pushd "%%~nI\PAKS\"
-
- If exist "ALI213.txt" (
- call :MakeVBS
- (for /f "skip=60 delims=" %%a in (ALI213.txt.ansi.txt) do (
- echo;%%a
- ))>$
- del /q "ALI213.txt" "ALI213.txt.ansi.txt"
- )
- for /f "delims=" %%a in ('dir /b/s/on *.txt') do (
- (echo;&echo;)>>$
- (for /f "usebackq delims=" %%b in ("%%a") do (
- echo;%%b
- ))>>$
- del /q "%%a"
- )
- move $ "%%~nI_说明.txt"
- popd
- )
- pause
- rem goto Menu
-
- :MakeVBS
- >"utf8ansi.vbs" (
- echo.set fso = CreateObject^("Scripting.FileSystemObject"^)
- echo.'U8ToU8Bom "ALI213.txt" '如果要生成一个有BOM的文件,启用此行
- echo. U8ToAnsi "ALI213.txt"
- echo.function U8ToU8Bom^(strFile^)
- echo.dim ADOStrm
- echo.Set ADOStrm = CreateObject^("ADODB.Stream"^)
- echo.ADOStrm.Type = 2
- echo.ADOStrm.Mode = 3
- echo.ADOStrm.CharSet = "utf-8"
- echo.ADOStrm.Open
- echo.ADOStrm.LoadFromFile strFile
- echo.ADOStrm.SaveToFile strFile ^& ^".u8.txt^", 2
- echo.ADOStrm.Close
- echo.Set ADOStrm = Nothing
- echo.end function
- echo.function U8ToAnsi^(strFile^)
- echo.dim ADOStrm
- echo.dim s
- echo.Set ADOStrm = CreateObject^("ADODB.Stream"^)
- echo.ADOStrm.Type = 2
- echo.ADOStrm.Mode = 3
- echo.ADOStrm.CharSet = "utf-8"
- echo.ADOStrm.Open
- echo.ADOStrm.LoadFromFile strFile
- echo.s = ADOStrm.ReadText
- echo.ADOStrm.Position = 0
- echo.ADOStrm.CharSet = "gbk"
- echo.ADOStrm.WriteText s
- echo.ADOStrm.SetEOS
- echo.ADOStrm.SaveToFile strFile ^& ^".ansi.txt^", 2
- echo.ADOStrm.Close
- echo.Set ADOStrm = Nothing
- echo.end function
- )
- cscript /NoLogo "utf8ansi.vbs"&del /q "utf8ansi.vbs"
复制代码
作者: terse 时间: 2013-1-5 15:58
没找到 Uninstall 还原标签 没运行前 大概看了下
代码 乱
作者: terse 时间: 2013-1-6 00:27
我也简化一下 install 段- @echo off
- set "RarPath=C:\Program Files\WinRAR\WinRAR.exe"
- :install
- for /f "delims=" %%I in ('dir /b/s/on "%~dp0*.rar"') do (
- del "%tmp%\ALI213*.txt" >nul 2>nul
- "%RarPath%" x -y -ibck "%%I" *.txt *.man *.pak *.bin "%%~dpnI\PAKS\"
- PUSHD "%%~dpnI\PAKS\"
- If exist "ALI213.txt" (
- rem 这里的+20自己去调整
- more /s +20 "%~s0" > "U82A.vbs"
- U82A.vbs "ALI213.txt" "ALI213.txt.ansi.t"&del U82A.vbs
- >"%%~nI_说明.txt.ansi.t" more +60 "ALI213.txt.ansi.t"
- del "ALI213.txt" "ALI213.txt.ansi.t"
- )
- type *.txt >>"%%~nI_说明.txt.ansi.t" 2>nul
- move "%%~nI_说明.txt.ansi.t" "%%~nI_说明.txt"
- popd
- )
- PAUSE&goto :eof
-
-
-
-
-
- Set objArgs = WScript.Arguments
- FUS = objArgs(0)
- FUD = objArgs(1)
- Call WriteToFile(FUD, ReadFile(FUS, "UTF-8"), "gbk")
-
- Function ReadFile(FUS, CharSet)
- Dim Str
- Set ADOStrm = CreateObject("Adodb.Stream")
- ADOStrm.Type = 2
- ADOStrm.mode = 3
- ADOStrm.charset = CharSet
- ADOStrm.Open
- ADOStrm.loadfromfile FUS
- S = ADOStrm.readtext
- ADOStrm.Close
- Set ADOStrm = Nothing
- ReadFile = S
- End Function
-
- Function WriteToFile (FUD, S, CharSet)
- Set ADOStrm = CreateObject("Adodb.Stream")
- ADOStrm.Type = 2
- ADOStrm.mode = 3
- ADOStrm.charset = CharSet
- ADOStrm.Open
- ADOStrm.WriteText S
- ADOStrm.SaveToFile FUD, 2
- ADOStrm.flush
- ADOStrm.Close
- Set ADOStrm = Nothing
- End Function
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |