中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-01 03:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]自动解压文件到指定目录(高手请进技术探讨) 查看 2,504 回复 10
楼 主 [原创]自动解压文件到指定目录(高手请进技术探讨) 发表于 2005-02-14 00:00 ·  中国 湖南 长沙 电信
高级用户
★★
积分 772
发帖 273
注册 2004-10-23 00:00
21年会员
UID 32861
性别 男
状态 离线
@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就是在解压过程后就不能显示中文了,哪位高手能帮兄弟和大家解决这个问题!小弟在这里谢谢了!!!
http://www.msfans.net/bbs/
2 发表于 2005-02-14 00:00 ·  中国 广东 广州 白云区 电信
金牌会员
★★★★
D◎$ Fαп
积分 4,562
发帖 1,883
注册 2004-01-19 00:00
22年会员
UID 15812
性别 男
来自 广东广州
状态 离线
写得不错!
一看这批处理就知道是在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。
----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
3 发表于 2005-02-14 00:00 ·  中国 湖南 长沙 电信
高级用户
★★
积分 772
发帖 273
注册 2004-10-23 00:00
21年会员
UID 32861
性别 男
状态 离线
谢谢楼上的指点使我又学到了一些知识!!只是就是修改后虽然能显示中文但是这段:echo.
echo -----------------------------------------
echo 请等待程序正在处理中(处理时间会因为
echo 你给出解压文件大小来决定时间的长短)
echo -----------------------------------------
echo.
却是一闪即过有没有办法使它直至处理成功后才激发CLS呢
http://www.msfans.net/bbs/
4 发表于 2005-02-14 00:00 ·  中国 广东 广州 白云区 电信
金牌会员
★★★★
D◎$ Fαп
积分 4,562
发帖 1,883
注册 2004-01-19 00:00
22年会员
UID 15812
性别 男
来自 广东广州
状态 离线
在执行解压缩程序时用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
----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
5 发表于 2005-02-14 00:00 ·  中国 湖南 长沙 电信
高级用户
★★
积分 772
发帖 273
注册 2004-10-23 00:00
21年会员
UID 32861
性别 男
状态 离线
好的我试下如果可以的话把代码整理一下供大家使用!但是我觉得没必要使用最小化我马上会写一个VBS的可以完全隐藏执行!谢谢楼上的指点!
http://www.msfans.net/bbs/
6 发表于 2005-02-15 00:00 ·  中国 湖南 长沙 电信
高级用户
★★
积分 772
发帖 273
注册 2004-10-23 00:00
21年会员
UID 32861
性别 男
状态 离线
修改后代码如下:@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就是就需要解压的文件不能和这个批处理文件在同一分区里不然就不执行操作大家研究下为什么!
http://www.msfans.net/bbs/
7 发表于 2005-02-16 00:00 ·  中国 河北 石家庄 桥西区 联通
版主
★★★
操作系统爱好者
积分 1,113
发帖 392
注册 2002-11-11 00:00
23年会员
UID 228
性别 男
状态 离线
纯DOS下我只用ARJ
DOS之家 http://doshome.com 站长 葛明阳
8 发表于 2005-02-17 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
楼主的批处理有很多写的不太严谨的地方,尤其是对用户输入的字母的大小写检验上。另外,你所谓的在同一个分区不操作是什么意思?
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
9 发表于 2005-02-17 00:00 ·  中国 湖南 长沙 电信
高级用户
★★
积分 772
发帖 273
注册 2004-10-23 00:00
21年会员
UID 32861
性别 男
状态 离线
就是指要解压的文件和这个批处理在同一分区的话就不执行解压操作直接显示操作成功!
http://www.msfans.net/bbs/
10 发表于 2005-02-17 00:00 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
我将你的批处理简单修改了一下,并不存在你所说的问题,仅供参考:

@echo off
echo.
echo -----------------------------------------
echo 请输入需要的解压文件的路径注意的是:
echo 本批处理只支持*.RAR,*.zip的文件格式
echo -----------------------------------------
echo.
set /p src=压缩文件所在路径:
if not exist %src% goto _quit
dir %src%\*.rar | find /i ".rar" > nul
if errorlevel 1 goto _findzip
goto _getdst
:_findzip
dir %src%\*.zip | find /i ".zip" > nul
if errorlevel 1 echo There has no *.zip and *.rar file in %src% && goto _quit
:_getdst
cls
echo.
echo -----------------------------------------
echo 请输入解压文件存放的路径
echo -----------------------------------------
echo.
set /p dst=目标路径:
cls
echo.
echo -----------------------------------------
echo 请等待程序正在处理中(处理时间会因为你
echo 给出解压文件大小来决定请按任意键继续)
echo -----------------------------------------
echo.
pause>nul
if not exist %dst% md %dst%
for /r %src% %%R in (*.rar) do md %dst%\%%~nR && rar32 x %%R %dst%\%%~nR\ >nul
for /r %src% %%A in (*.zip) do md %dst%\%%~nA && pkunzip %%A %dst%\%%~nA\ >nul
CHCP 936 >NUL
cls
echo.
echo -----------------------------------------
echo 操作成功!!如果你需要删除压缩文件请输入Y
echo 如果你想把文件目录也删除的话请输入all!!
echo -----------------------------------------
set /p sure=请输入您的选择:
echo %sure% | find /i "y" > nul
if errorlevel 1 goto _all
for /r %src% %%R in (*.rar) do del /f /q %%R
for /r %src% %%B in (*.zip) do del /f /q %%B
goto _quit
:_all
echo %sure% | find /i "all" > nul
if errorlevel 1 goto _quit
rd /q /s %src%>nul:_quit
for %%I in (src dst sure) do set %%I=
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
11 发表于 2005-02-19 00:00 ·  中国 湖南 长沙 电信
高级用户
★★
积分 772
发帖 273
注册 2004-10-23 00:00
21年会员
UID 32861
性别 男
状态 离线
问题所在已经找不出来了.问题出在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
http://www.msfans.net/bbs/
论坛跳转: