![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 13:32 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [原创]自动解压文件到指定目录(高手请进技术探讨) |
| 可打印版本 2,692 / 10 |
| 第1楼 chenhui530 | 发表于 2005-02-14 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
[原创]自动解压文件到指定目录(高手请进技术探讨) @echo off
for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\%%i copy *.* %systemroot% /y>nul && del /q %systemroot%\rar.bat>nul for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\system32\%%i copy *.* %systemroot%\system32\ /y>nul && del /q %systemroot%\system32\rar.bat>nul echo. echo ----------------------------------------- echo 请输入需要的解压文件的路径注意的是: echo 本批处理只支持*.RAR,*.zip的文件格式 echo ----------------------------------------- echo. set /p a= cls echo. echo ----------------------------------------- echo 请输入解压文件存放的路径 echo ----------------------------------------- echo. set /p b= cls echo. echo ----------------------------------------- echo 请等待程序正在处理中(处理时间会因为 echo 你给出解压文件大小来决定时间的长短) echo ----------------------------------------- echo. if not exist %b% md %b% for /r %a% %%a in (*.rar) do md %b%\%%~na && rar32 x %%a %b%\%%~na>nul for /r %a% %%A in (*.zip) do md %b%\%%~nA && pkunzip.exe %%A %b%\%%~nA>nul cls echo. echo ----------------------------------------- echo 操作成功!!如果你需要删除压缩文件请输入Y echo 如果你想把文件目录也删除的话请输入all!! echo ----------------------------------------- set /p sure= if %sure%==y for /r %a% %%b in (*.rar) do del /q %%b>nul if %sure%==y for /r %a% %%B in (*.zip) do del /q %%B>nul if %sure%==all rd /q /s %a%>nul 由于论坛上传文件限制没把pkunzip.exe ,rar32.exe等系列文件上传上来大家可以到软件站下然后把它们和这个批处理放在一起运行批处理即可,上面的批处理还有点BUG就是在解压过程后就不能显示中文了,哪位高手能帮兄弟和大家解决这个问题!小弟在这里谢谢了!!! |
|
| 第2楼 JonePeng | 发表于 2005-02-14 00:00 |
| 金牌会员 发帖 1,883 积分 4,562 来自 广东广州 | |
|
写得不错!
一看这批处理就知道是在Win2000/XP下运行。解压缩后不能显示中文是因为RAR.EXE和PKUNZIP.EXE都是16位DOS应用程序,一旦运行,命令提示符就会自动转换代码页为437(OEM-United States),该代码页只能显示英文。其实可以恢复能显示中文的,代码页是936(ANSI/OEM - Simplified Chinese GBK),运行MODE CON CP SELECT=936,或者CHCP 936即可。 因此,建议楼主在解压缩完成之后、在CLS之前加一句:CHCP 936 >NUL。 |
|
| 第3楼 chenhui530 | 发表于 2005-02-14 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
谢谢楼上的指点使我又学到了一些知识!!只是就是修改后虽然能显示中文但是这段:echo.
echo ----------------------------------------- echo 请等待程序正在处理中(处理时间会因为 echo 你给出解压文件大小来决定时间的长短) echo ----------------------------------------- echo. 却是一闪即过有没有办法使它直至处理成功后才激发CLS呢 |
|
| 第4楼 JonePeng | 发表于 2005-02-14 00:00 |
| 金牌会员 发帖 1,883 积分 4,562 来自 广东广州 | |
|
在执行解压缩程序时用Start命令,再加/MIN /WAIT参数,使解压程序能在另一个最小化了的DOS窗口运行,其中/WAIT使解压程序执行完成才返回。这样解压的过程全转移到另一个窗口执行,那些中文不会一闪而过了。for /r %a% %%a in (*.rar) do md %b%\%%~na && start /min /wait rar32 x %%a %b%\%%~na>nul
for /r %a% %%A in (*.zip) do md %b%\%%~nA && start /min /wait pkunzip.exe %%A %b%\%%~nA>nul |
|
| 第5楼 chenhui530 | 发表于 2005-02-14 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
好的我试下如果可以的话把代码整理一下供大家使用!但是我觉得没必要使用最小化我马上会写一个VBS的可以完全隐藏执行!谢谢楼上的指点!
|
|
| 第6楼 chenhui530 | 发表于 2005-02-15 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
修改后代码如下:@echo off
for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\%%i copy *.* %systemroot% /y>nul && del /q %systemroot%\rar.bat>nul for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\%%i if not exist %systemroot%\system32\%%i copy *.* %systemroot%\system32\ /y>nul && del /q %systemroot%\system32\rar.bat>nul echo. echo ----------------------------------------- echo 请输入需要的解压文件的路径注意的是: echo 本批处理只支持*.RAR,*.zip的文件格式 echo ----------------------------------------- echo. set /p a= cls echo. echo ----------------------------------------- echo 请输入解压文件存放的路径 echo ----------------------------------------- echo. set /p b= cls echo. echo ----------------------------------------- echo 请等待程序正在处理中(处理时间会因为你 echo 给出解压文件大小来决定请按任意键继续) echo ----------------------------------------- echo. pause>nul if not exist %b% md %b% for /r %a% %%a in (*.rar) do md %b%\%%~na && rar32 x %%a %b%\%%~na>nul for /r %a% %%A in (*.zip) do md %b%\%%~nA && pkunzip.exe %%A %b%\%%~nA>nul CHCP 936 >NUL cls echo. echo ----------------------------------------- echo 操作成功!!如果你需要删除压缩文件请输入Y echo 如果你想把文件目录也删除的话请输入all!! echo ----------------------------------------- set /p sure= if %sure%==y for /r %a% %%b in (*.rar) do del /q %%b>nul if %sure%==y for /r %a% %%B in (*.zip) do del /q %%B>nul if %sure%==all rd /q /s %a%>nul但是还是有个BUG就是就需要解压的文件不能和这个批处理文件在同一分区里不然就不执行操作大家研究下为什么! |
|
| 第7楼 gmy | 发表于 2005-02-16 00:00 |
| 版主 发帖 392 积分 1,113 | |
|
纯DOS下我只用ARJ
|
|
| 第8楼 Climbing | 发表于 2005-02-17 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
楼主的批处理有很多写的不太严谨的地方,尤其是对用户输入的字母的大小写检验上。另外,你所谓的在同一个分区不操作是什么意思?
|
|
| 第9楼 chenhui530 | 发表于 2005-02-17 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
就是指要解压的文件和这个批处理在同一分区的话就不执行解压操作直接显示操作成功!
|
|
| 第10楼 Climbing | 发表于 2005-02-17 00:00 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
我将你的批处理简单修改了一下,并不存在你所说的问题,仅供参考:
|
|
| 第11楼 chenhui530 | 发表于 2005-02-19 00:00 |
| 高级用户 发帖 273 积分 772 | |
|
问题所在已经找不出来了.问题出在rar32.exe不支持带有空格的路径@echo off
for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\%%i copy *.* %systemroot% /y>nul && del /q %systemroot%\rar.bat>nul for %%i in (rar32.exe,pkunzip.exe) do if not exist %systemroot%\%%i if not exist %systemroot%\system32\%%i copy *.* %systemroot%\system32\ /y>nul && del /q %systemroot%\system32\rar.bat>nul echo. echo ----------------------------------------- echo 请输入需要的解压文件的路径注意的是: echo 本批处理只支持*.RAR,*.zip的文件格式 echo ----------------------------------------- echo. set /p a= cls echo. echo ----------------------------------------- echo 请输入解压文件存放的路径 echo ----------------------------------------- echo. set /p b= cls echo. echo ----------------------------------------- echo 请等待程序正在处理中(处理时间会因为你 echo 给出解压文件大小来决定请按任意键继续) echo ----------------------------------------- echo. pause>nul if not exist %b% md %b% for /r %a% %%a in (*.rar) do md %b%\%%~na && rar32 x "%%a" "%b%\%%~na">nul for /r %a% %%A in (*.zip) do md %b%\%%~nA && pkunzip.exe "%%A" "%b%\%%~nA">nul CHCP 936 >NUL cls echo. echo ----------------------------------------- echo 操作成功!!如果你需要删除压缩文件请输入Y echo 如果你想把文件目录也删除的话请输入all!! echo ----------------------------------------- set /p sure= if %sure%==y for /r %a% %%b in (*.rar) do del /q %%b>nul if %sure%==y for /r %a% %%B in (*.zip) do del /q %%B>nul if %sure%==all rd /q /s %a%>nul |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |