我正在使用以下winrar命令行来创建zip存档:
rar.exe a -df -ep -ag[yyyyMMddhhmmss] -ms[txt] C:\MyZipFile.zip C:\tmp\MyFiles*.txt
Run Code Online (Sandbox Code Playgroud)
创建的档案是RAR格式而不是ZIP格式.有没有办法创建常规ZIP而不是RAR档案?
所以目前我的用户下载一个zipfile,解压缩然后运行setup.exe - 我希望他们只需点击一下即可.使用http://www.wikihow.com/Use-7Zip-to-Create-Self-Extracting-excutables我可以创建一个自解压的exe,但它实际上并没有运行安装程序.
从这个问题
为什么7zip在制作SFX安装程序时忽略我的InstallPath?
看来我还需要一个.sfx文件,所以我从另一个问题复制并创建了一个包含以下内容的文件
;!@Install@!UTF-8!
InstallPath="C:\\test"
GUIMode="2"
RunProgram="setup.exe"
;!@InstallEnd@!
Run Code Online (Sandbox Code Playgroud)
并调用setup.sfx并将其与其他文件一起存档
setup.ini
setup.exe
setup.ico
install.jar
JVM32 (folder)
Run Code Online (Sandbox Code Playgroud)
但它没有任何区别,我还需要做些什么.
补充问题,我也有WinRar,它是否影响最终用户体验我是否使用7Zip或Winrar?
WinRAR给出了路径/文件名长度仅为216个字符的260个字符限制错误.见下文.原因是提取目标是一个工具很长的临时文件夹.有关此文件夹的详细信息,请参阅https://superuser.com/questions/154969/where-winrar-extracts-files.
! C:\<path>\<filename.rar>: Cannot create <filename>
Total path and file name length must not exceed 260 characters
Run Code Online (Sandbox Code Playgroud)
我该如何修改?
在尝试提取zip文件时,我收到错误:
c:\ path \name.zip不是RAR存档
没有要提取的文件
我的代码是:
p.StartInfo.FileName = @"C:\Program Files\WinRAR\rar.exe";
p.StartInfo.Arguments = string.Format("x -o- {2} \"{0}\" * \"{1}\"\\ ",
szFN,
outFolder,
passWord == null ? "" : string.Format("-p\"{0}\"", passWord));
Run Code Online (Sandbox Code Playgroud)
GUI版本可以提取zip和7z文件.
为什么这不起作用?如何提取zip和7z文件?
(注意:我有7zip的不同源代码.我想我可以合并这两个,只有当文件有rar扩展时才使用上面的.但我不喜欢那个解决方案.)
我见过可执行文件提取自己并在setup.exe
之后运行压缩文件:双击该文件解压缩它然后运行以前压缩的文件setup.exe
.
我怎么能做到这一点?我想使用WinRAR,如何将setup.exe
解压缩后的自解压可执行文件解压缩到临时文件夹?
Winrar的一天
我想做的就是使用通配符排除文件夹及其内容,甚至在阅读文档后,它变成了一个猜谜游戏......
所以我的试验床看起来像:
C:\!tmp1\f1
C:\!tmp1\f1\f1.txt
C:\!tmp1\f1\a
C:\!tmp1\f1\a\a.txt
C:\!tmp1\f2
C:\!tmp1\f2\f2.txt
C:\!tmp1\f2\a
C:\!tmp1\f2\a\a.txt
Run Code Online (Sandbox Code Playgroud)
我正在执行:
C:\>"c:\program files\winrar\winrar.exe" a -r !tmp1.rar !tmp1
Run Code Online (Sandbox Code Playgroud)
这给了我一个rar!tmp1作为根(唯一的顶级文件夹).
排除开关是-x<filepathpattern>
并且可以包括多次.
所以,鉴于我们想要排除f2及其所有子内容......
-x*\f2\*
Run Code Online (Sandbox Code Playgroud)
删除内容,但离开f2
-xf2
Run Code Online (Sandbox Code Playgroud)
什么都不做 - 包括所有
-x\f2
Run Code Online (Sandbox Code Playgroud)
什么都不做 - 包括所有
-x*\f2
Run Code Online (Sandbox Code Playgroud)
什么都不做 - 包括所有(现在我很生气),所以肯定一定是......
-x\f2\
Run Code Online (Sandbox Code Playgroud)
不,什么都不做 - 包括所有.所以它有GOT ......
-x*\f2\
Run Code Online (Sandbox Code Playgroud)
地狱不,什么都不做 - 包括所有.我已经知道了
-x*\f2\*
Run Code Online (Sandbox Code Playgroud)
删除内容,但离开f2.我们走吧......
-x*f2\
Run Code Online (Sandbox Code Playgroud)
什么都不做 - 包括所有.GRRRR.啊哈!怎么样...
-x!tmp1\f2\
Run Code Online (Sandbox Code Playgroud)
不,什么都不做 - 包括所有.WTF.好吧,所以GOT要......
-x!tmp1\f2
Run Code Online (Sandbox Code Playgroud)
圣洁的莫莉,它奏效了!嗯,那怎么来....
-x*\f2
Run Code Online (Sandbox Code Playgroud)
不起作用?这是一个小恶魔,让我沿着这条疯狂的道路开始,应该有效!
鉴于这一切,我是否敢于尝试*/a/*
追踪目录,删除内容和目录?
-x*\a
Run Code Online (Sandbox Code Playgroud)
不起作用,当然,什么都不做.
-x*\*\a
Run Code Online (Sandbox Code Playgroud)
不起作用,当然,什么都不做.
-x!tmp1\*\a
Run Code Online (Sandbox Code Playgroud)
不.但...
-x*\a\*
Run Code Online (Sandbox Code Playgroud)
删除两个目录的内容,但保留文件夹.所以,在绝望中我可以使用-ed
不会存储空文件夹的开关,但这是一个广泛的黑客,我想消除指定的文件夹不是所有空文件夹.
随着我对winrar的不满,我正在向前传递信息的指挥棒,我们将知道如何使用通配符而不是使用-ed
开关专门排除文件夹及其内容.
由于大多数Linux发行版都放弃了gzip和bzip2来支持LZMA2来压缩它们的包,以及许多平台上的许多开源实现,我想知道:我们不应该将DEFLATE和.zip
格式(不幸的是一遍又一遍地反复)放弃,并继续采用其他现代方式分发我们的(源)包?
GNU tar支持J
交换机,它使用xz
(另一个LZMA2压缩器)作为过滤器:
$ tar cJf foo.tar.xz foo/
Run Code Online (Sandbox Code Playgroud)
但是,我倾向于使用7z
(p7zip实现),它是7za
Linux下的朋友,用于创建存档.在创建档案时,我仍然使用"避免tar-bombs"范例,这意味着档案中有一个目录,因此从命令行中提取不会导致当前目录中的文件溢出(这是Linux上的标准运作方式,类似于tar
,但在Windows下,它似乎要少得多.
无论如何,似乎由于在软件包中使用(例如Fedora RPMs和Ubuntu DEB),以及tar
LZMA2是bzip2后使用的"下一个最好的东西" 等工具的过滤器.它具有很高的压缩率(在标准设置中远远超过bzip2)并且速度非常快(压缩比gzip略慢,
我自己做了一些基准测试,但我想在一些更广泛的基准测试中转向现场:
现在,你会注意到,作为参考实现的7-zip并没有出现在第一位.然而,Freearc使用它自己的.arc
格式,这不是真正的跨平台能力,与80年代的旧 ARC 不兼容.nanozip不是开源的,这是一种低迷,但它的算法很重要,而不是归档!
无论如何,现在使用7-zip及其派生实现(xz)的性能不再是问题,并且压缩率本身就说明了,我想将我的源包分发为.7z
或.tar.xz
存档.但是,我面前有两个障碍,我似乎无法接受:
WinRAR的倡导者.不要误会我的意思,我对WinRAR或其用户没有怨恨,只是我不能在Linux上真正制作RAR,而且没有必要,因为我们有免费的LZMA2工具.正如我所说,自从成为发行包的一个组成部分后,它可以在任何现代发行版中使用.由于需要大约在同一时间做出.7z
比.rar
和LZMA2文件一般都比较小,我不明白为什么不能使用7-Zip.
tar档案必须是zip或bzip2,没有例外.这很难.为什么有这么多人对gzip印象深刻?甚至bzip2在大多数情况下都没有看到太多用法.当然,gzip很快,对于按需压缩(如Web服务器或创建大型镜像备份)而言,这是一个很好的观点.但是分发软件怎么样?LZMA2 非常不对称.虽然压缩需要时间,但解压缩速度非常快.
好的,现在我的问题出现了:
既然LZMA2可以说是下一个更好的压缩算法,为什么人们不会跳上火车呢?为什么人们仍然使用专有的WinRAR,压缩率较差,并且没有移植到Linux(除了unrar
,但你显然无法创建存档).为什么Tarball仍然大部分都是gziped?
难道没有办法说服人们转向更新,更可靠的归档格式,这不仅是跨平台的,而且是免费的吗?当我给某人一个文件结尾时.7z
,他们往往不知道该怎么做,这会改变吗?
哦,这是我自己做的小基准.我到处使用默认设置:
11837440 GNUtar_TAR.tar
10657984 Arc_ARC.arc
9632524 PA2010_TAR_BZip2.tar.bz2
9536967 PA2010_LHA_Frozen5.lzh
9510148 PA2010_ZIP_BZip2.zipx
9490211 …
Run Code Online (Sandbox Code Playgroud) 我有一个第三方安装程序,我希望我的用户能够下载并运行作为我编写的应用程序的先决条件.安装程序可以采用允许被动安装的参数,用户可以在其中查看进程的进度,但不必与安装进行交互.
以前,我通过在WinRar中创建SFX文件来完成此行为.在WinRAR GUI的选项中,您可以指定在解压缩归档后要启动的文件,以及应用程序的参数.
有没有办法创建SFX文件并使用控制台设置这些自动执行属性?我正在尝试创建一个处理所有这些的批处理文件.
以下是我目前的批处理文件内容:
C:\Progra~1\WinRAR\rar a -m0 installer_archive.rar install_me.exe
C:\Progra~1\WinRAR\rar s installer_archive.rar installer_auto_extractor.exe
Run Code Online (Sandbox Code Playgroud)
在最后一步之后,我应该怎么做才能更新SFX?
使用WinRAR命令行(C:\Program Files\WinRAR\rar.exe)
,我要做的就是压缩单个文件夹,(C:\Users\%username%\desktop\someFolder)
并可能更改创建的.zip文件的名称.我尝试过"rar.exe a" C:\Users\%username%\desktop\someFile
"并且它有效,但它会压缩另一个文件夹(不是我放的那个).
我究竟做错了什么?
你能提供解释吗(也许告诉我递归是什么因为我不熟悉它)?
谢谢
我想创建一个批处理文件,可以从我放在脚本中的文件夹中创建一个zip文件.这是我的脚本:
@REM ------- BEGIN xpi.bat ----------------
@setlocal
@echo off
set path="C:\Program Files\WinRAR\";%path%
winrar.exe a -afzip -m5 -ed -pTest -r c:\test.zip c:\MyFolder
REM ------- END xpi.bat ------------------
Run Code Online (Sandbox Code Playgroud)
上面的脚本创建了一个像这样的结构的zip文件,
MyFolder
--subFolder1
--subFolder2
--file1.txt
--file2.doc
--file3.js
Run Code Online (Sandbox Code Playgroud)
但我想要的形成的zip文件有这样的结构,没有父文件夹(MyFolder),
subFolder1
subFolder2
file1.txt
file2.doc
file3.js
Run Code Online (Sandbox Code Playgroud)
谁能帮我解决这个问题?
注意:我使用的应用程序是WinRar
winrar ×10
batch-file ×3
7zip ×2
sfx ×2
zip ×2
command ×1
command-line ×1
compression ×1
console ×1
gzip ×1
installer ×1
rar ×1
unrar ×1