标题:好玩的winrar在命令窗口可以使用?
只看楼主
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
结帖率:98.96%
 问题点数:0 回复次数:14 
好玩的winrar在命令窗口可以使用?
好玩的winrar在命令窗口可以使用?
*已经把 winrar.exe ,rar.exe unrar.exe,RarExt.dll等文件放到当前目录了。
*我在论坛上找到 winrar.exe的用法,在命令窗口输入命令可以使用,在把命令放在 prg文件中,就不能使用,怪事 win7 64
*压缩:
*把当前目录下的 data 目录中的文件压缩为 dt.rar
RUN /N7 WinRAR.exe a -ibck -r -k -o+ -y dt.rar data\*.*
*解压:
*把当前目录下的 dt.rar 解压到 当前目录 dt 去
RUN /N7 WinRAR.exe x -ibck -r -k -o+ -y dt.rar dt\ &&我测试了,不能这样dt\*.*
*这里有个参数 x,可以换成 e,区别是
* e 是把所有的文件都解压到 dt\去,里面再也没子目录
* x 带子目录解压,此时,dt 里面看到的是 data 目录,
问题是:在VFP的命令窗口运行 RUN /N7 WinRAR.exe a -ibck -r -k -o+ -y dt.rar data\*.* 或者 RUN /N7 WinRAR.exe x -ibck -r -k -o+ -y dt.rar dt\
都能正常工作,但把 RUN /N7 WinRAR.exe x -ibck -r -k -o+ -y dt.rar dt\ 放在 prg 文件中运行,不起作用,什么都没。但压缩就可以。


搜索更多相关主题的帖子: 文件压缩 winrar 
2016-06-11 15:58
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
俺找到答案了。
问题在路径。。
压缩时:
RUN /N7 WinRAR.exe a -ibck -r -k -o+ -y dt.rar data\*.*  &&正常,压缩当前目录中的子目录 data 文件到 当前目录的子目录 dt
RUN /N7 WinRAR.exe a -ibck -r -k -o+ -y e:\abc\dt.rar e:\glwy_sql\data\*.*  &&正常,压缩 e:\glwy_sql\data\所有文件 当前目录的子目录 e:\glwy_sql\dt\
上面2个都能正常运行,但是有区别的,主要在解压这里
解压时:
RUN /N7 WinRAR.exe x -ibck -r -k -o+ -y dt.rar dt\ &&在prg文件中运行错误,但在命令窗口正常
RUN /N7 WinRAR.exe x -ibck -r -k -o+ -y e:\glwy_sql\dt.rar dt\ &&在prg文件中运行正常,在命令窗口也正常
RUN /N7 WinRAR.exe x -ibck -r -k -o+ -y e:\glwy_sql\dt.rar dt\*.*  &&在prg文件中运行错误,在命令窗口也错误
RUN /N7 WinRAR.exe x -ibck -r -k -o+ -y e:\glwy_sql\dt.rar e:\glwy_sql\dt\ &&在prg文件中运行正常,在命令窗口也正常,
结论,解压时,dt.rar 要用绝对路径在可以
上面说到,压缩时,用绝对路径和相对路径,是有区别的,区别如下:
压缩时,用绝对路径,如:e:\glwy_sql\data\*.* ,压缩后的解压路径是 e:\glwy_sql\dt\glwy_sql\data\

压缩时,用相对路径,如:data\*.* ,压缩后的解压路径是 e:\glwy_sql\dt\data\




 
2016-06-11 16:38
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
论坛找到:wengjl
作者:sibill 日期:2008-11-07
压缩:
  Delete FILE bak.jhz
  RUN /N7 WinRAR.exe a -ibck -r -k -o+ -y -hp123 -p123 bak.jhz dbf\*.*
或 RUN /N7 WinRAR.exe a -ibck -r -o+ -y -hp123 -p123 bak.jhz dbf\*.*
或 RUN /N7 WinRAR.exe a -ibck -ep1 -r -o+ -y -hp123 -p123 bak.jhz dbf\*.*

解压:
  RUN /N7 WinRAR.exe x -ibck -r -k -o+ -y -hp123 -p123 bak.jhz dbf\*.*
或 RUN /N7 WinRAR.exe x -ibck -r -o+ -y -hp123 -p123 bak.jhz dbf\*.*  
* 本人测试 dbf\*.* ,带*.*错误,WIN7 64
参数说明:
a:添加到档案文件中
x:从档案文件中全路径释放文件
-ibck:后台运行WinRAR
-ep1:根据名字删除底层目录。不存储在命令行中输入的路径
-r:连同子文件夹操作
-k:锁定档案文件
-o+:覆盖已经存在的文件
-y:对所有询问均回应为“是”
-hp123:加密文件数据和文件头,密码为123
-p123:设置密码为123,此密码上一个密码可以不一样
bak.jhz:压缩后的文件名或要解压的文件(.jhz为自定义扩展名)
dbf\*.*:要压缩的文件或要解压到的文件位置

2016-06-11 16:43
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
得分:0 
Win 7+ 现在都带压缩/解压的软件了,为什么还要用第三方的压缩软件?

Clear
lcZip = Zip("C:\temp\", "C:\Test.ZIP")
? lcZip


*!*    ******************************************
*!*    功  能:压缩文件函数。支持通配符,如*.prg,*.fr?等,支持子文件夹。
*!*            注意:此函数将覆盖已存在的zip文件,使用前应检查zip文件是否存在。
*!*    函数名:Zip(cSourceFile,cZipFileName[,cPassword])
*!*    返回值:逻辑值,压缩成功,返回真。
*!*    参  数:cSourceFile:字符型,准备压缩的文件列表,可以使用通配符,
*!*            不同文件使用|分隔,推荐使用相对路径,可以保存相对的路径信息,
*!*            如果使用绝对路径,则所有路径信息会被删除。
*!*            cZipFileName:字符型,要生成的压缩文件,比如Test.zip,可以使用相对路径或绝对路径。
*!*    类  型:字符型。
*!*    默认值:无。
*!*    示  例:lcZip = Zip("C:\temp\", "C:\Test.ZIP")  && 压缩C:\temp\所有文件所到C:\Test.ZIP
*!*    ******************************************
Function Zip(cSourceFile As String, cZipFileName As String)

*!*    https://technet.
*!*    http://www.
#DEFINE FONTS  0x14

#DEFINE FOF_SILENT  0x4
#DEFINE FOF_RENAMEONCOLLISION  0x8
#DEFINE FOF_NOCONFIRMATION  0x10
#DEFINE FOF_ALLOWUNDO  0x40
#DEFINE FOF_FILESONLY  0x80
#DEFINE FOF_SIMPLEPROGRESS  0x100
#DEFINE FOF_NOCONFIRMMKDIR  0x200
#DEFINE FOF_NOERRORUI  0x400
#DEFINE FOF_NOCOPYSECURITYATTRIBS  0x800
#DEFINE FOF_NORECURSION  0x1000
#DEFINE FOF_NO_CONNECTED_ELEMENTS  0x2000

cFlags = FOF_SILENT + FOF_NOCONFIRMATION + FOF_NOERRORUI
AERROR(arrayError)
lcRet = ""
    If Parameters() <> 2
        lcRet = "参数错误."
    Else
        Strtofile(Chr(0x50) + Chr(0x4B) + Chr(0x05) + Chr(0x06) + Replicate(Chr(0), 18), cZipFileName)
        oShell = Createobject("Shell.Application")
        ? oShell.NameSpace(cZipFileName).Count
? arrayError(2)
        For Each oFile In oShell.NameSpace(cSourceFile).items
            oShell.NameSpace(cZipFileName).CopyHere(oFile)
        Endfor
    Endif
        lcRet = "压缩正确."
    oShell = .Null.
    Return lcRet

Endfunc

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-06-11 20:50
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
得分:0 
Clear
lcZip = UnZip("C:\Test.ZIP", "C:\Temp\aaa")
? lcZip


*!*    ******************************************
*!*    功  能:解压缩单个文件。
*!*    函数名:UnZip(cZipFileName, cDestination)
*!*    返回值:逻辑值,压缩成功,返回真。
*!*    参  数:cZipFileName:字符型,待解压的Zip文件名
*!*            cDestination:字符型,在zip中要解压的文件名
*!*    类  型:字符型。
*!*    默认值:无。
*!*    示  例:lcUnZip = UnZip("C:\Test.ZIP", "C:\Temp\")  && 解压缩C:\Test.ZIP所有文件所到C:\temp\
*!*    ******************************************
Function UnZip(cZipFileName As String, cDestination As String)
    lcRet = ""
    If Parameters() <> 2
        lcRet = "参数错误."
    Else
        oShell = Createobject("Shell.Application")
        For Each oFile In oShell.NameSpace(cZipFileName).Items
            oShell.NameSpace(cDestination).CopyHere(oFile)
        Endfor
    Endif
    lcRet = "解压缩正确."
    oShell = .Null.
    Return lcRet

Endfunc

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-06-11 21:43
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
知道,看到你的了,为了XP能用。
所以还是要用WINRAR
2016-06-11 22:16
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
得分:0 
记得 XP 也是自带压缩程序的。

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-06-12 08:12
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
回复 7楼 aaaaaa
谢了。找台XP电脑来测试1下。
2016-06-12 08:34
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
得分:0 
如果一定要用 WinRAR,尽量不要用 Run /N7 方式,Windows 与 DOS 通讯或返回消息是个麻烦,用 API / ShellExecute() 等方式,支持长路径/文件名。

或者用 VFP 的 Fll 文件,速度更快更兼容:http://www.

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-06-12 09:51
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:108
帖 子:2175
专家分:3785
注 册:2007-4-27
得分:0 
以下是引用mywisdom88在2016-6-11 16:43:00的发言:

论坛找到:wengjl
作者:sibill 日期:2008-11-07
压缩:
  Delete FILE bak.jhz
  RUN /N7 WinRAR.exe a -ibck -r -k -o+ -y -hp123 -p123 bak.jhz dbf\*.*
或 RUN /N7 WinRAR.exe a -ibck -r -o+ -y -hp123 -p123 bak.jhz dbf\*.*
或 RUN /N7 WinRAR.exe a -ibck -ep1 -r -o+ -y -hp123 -p123 bak.jhz dbf\*.*

解压:
  RUN /N7 WinRAR.exe x -ibck -r -k -o+ -y -hp123 -p123 bak.jhz dbf\*.*
或 RUN /N7 WinRAR.exe x -ibck -r -o+ -y -hp123 -p123 bak.jhz dbf\*.*  
* 本人测试 dbf\*.* ,带*.*错误,WIN7 64
参数说明:
a:添加到档案文件中
x:从档案文件中全路径释放文件
-ibck:后台运行WinRAR
-ep1:根据名字删除底层目录。不存储在命令行中输入的路径
-r:连同子文件夹操作
-k:锁定档案文件
-o+:覆盖已经存在的文件
-y:对所有询问均回应为“是”
-hp123:加密文件数据和文件头,密码为123
-p123:设置密码为123,此密码上一个密码可以不一样
bak.jhz:压缩后的文件名或要解压的文件(.jhz为自定义扩展名)
dbf\*.*:要压缩的文件或要解压到的文件位置


   我2008年为同事制作一个竞赛报名系统,比赛有8个大类,每个大类里又分数个小类,一年多次比赛,且每次比赛只开设1-2个大类。

  所以我采用系统中设置本次的比赛项目,然后生成一个本次比赛项目的报名系统的压缩包,分发到学校,由学校注册后,进行报名,上报报名数据,再汇总来实现,从网上搜索到了WINRAR的用法,当时也网页上的说明都记下了(过了一年再去网页上找,没找到。觉得全记下来是个不错的做法),一直使用得顺手,现在的WIN7 32 上也是好用的。“…… DBF\*.*”是指对DBF目录下的所有文档都打入包内。


只求每天有一丁点儿的进步就可以了
2016-06-12 11:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-465842-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.619901 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved