批处理文件脚本到zip文件

use*_*265 17 windows batch-file

我有这种模式的文件夹结构.我刚刚在每个子目录中显示了两个子目录和2个文件,但通常我在单个级别上有n个子目录,在它们下面有单个级别的文件(但可以是n个文件).

Directory master
subDirectory x:
  file1
  file2
Directory y:
  file 3
  file 4
Run Code Online (Sandbox Code Playgroud)

我需要创建一个Windows脚本,一个从主目录运行的批处理文件,并给我两个包含各自文件的zip文件x.zip和y.zip.

我知道我的脚本必须使用for和zip命令但我正在试图让它工作,因为我无法理解这些命令的语法和谷歌搜索似乎没有帮助.

我找到了这样的命令, for %f in ("*.*") do zip "%~nf.zip" "%f" 但它似乎只有在没有子文件夹的情况下才直接存在.

Mag*_*goo 20

for /d %%a in (*) do (ECHO zip -r -p "%%~na.zip" ".\%%a\*")
Run Code Online (Sandbox Code Playgroud)

应该在一批内工作.

请注意,我已经包含了一个ECHO简单地显示建议的命令.您需要删除ECHOkeywor以执行命令.

  • 可能,不.它不是内置命令或提供的实用程序.从我安装"Free Pascal"时,我的路径上有一个Info-ZIP`zip.exe`的副本.如果你使用`Winzip`,那么你需要命令行支持实用程序`WZZIP.exe`.在此代码中将`wzzip`替换为`zip`会产生类似的结果,但压缩效果更好.如果你正在使用其他一些实用程序,那么 - YMMV. (4认同)
  • 明确的问题是:您可以从头开始使用 cmd 中的 zip 吗? (2认同)

小智 11

我知道它太晚了,但如果你还想尝试

for /d %%X in (*) do (for /d %%a in (%%X) do ( "C:\Program Files\7-Zip\7z.exe" a -tzip "%%X.zip" ".\%%a\" ))
Run Code Online (Sandbox Code Playgroud)

这里*是当前文件夹.有关更多选项,请尝试此链接

  • 答案中的链接已经死了. (2认同)

m3n*_*nda 5

你在附近:)

首先,批处理(%%变量)和Windows CMD(%变量)使用不同的变量命名.其次,我不知道你如何使用CMD的zip.这是来自我认为的Linux用户.在Win上使用内置的zip操作并不简单,使用批处理脚本更难.

但无论如何你很幸运.我从cygwin包中获取(提取到目标文件夹)zip.exe和cygwin1.dll(3mb文件大小),并立即开始播放.

当然,我使用CMD进行更好/更快的测试而不是批量.只记得在怪我之前修改%varname到%% varname:P

for /d %d in (*) do zip -r %d %d

说明: for /d ...匹配内部的任何文件夹.只有忽略文件的文件夹.(用于/ f到文件匹配) for /d %d in ...%d告诉cmd您想要为您的变量分配名称吗?我把d匹配widh d(目录含义). for /d %d in (*) ...很重要.这使我CD成为所需的文件夹,或从中运行.(*)这将意味着所有这个目录,因为我们使用/d的文件没有被处理,所以不需要设置模式,即使你只需要一些文件夹.您可以使用绝对路径.不确定批次亲戚的问题. for /d %d in (*) do zip -r ...ZIP是显而易见的.(exec zip本身并查看帮助显示以使用您的自定义规则).r-用于递归,因此将添加任何内容. for /d %d in (*) do zip -r %d %d 第一个%d是zip名称.您可以尝试使用myzip.zip,但如果失败,因为如果您有2个或更多文件夹,则第二个不能给出第一个文件夹的名称,并且不会在没有更多参数的情况下覆盖.因此,我们将%d传递给两者,这是当前迭代文件夹名称压缩到具有文件夹名称的文件中.不必附加".zip"来命名.

在开始玩的时候比我预期的要短.


Pod*_*.io 5

无需外部依赖7zip或ZIP-创建一个vbs脚本并执行:

    @ECHO Zipping
    mkdir %TEMPDIR%
    xcopy /y /s %FILETOZIP% %TEMPDIR%
    echo Set objArgs = WScript.Arguments > _zipIt.vbs
    echo InputFolder = objArgs(0) >> _zipIt.vbs
    echo ZipFile = objArgs(1) >> _zipIt.vbs
    echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipIt.vbs
    echo Set objShell = CreateObject("Shell.Application") >> _zipIt.vbs
    echo Set source = objShell.NameSpace(InputFolder).Items >> _zipIt.vbs
    echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs
    @ECHO *******************************************
    @ECHO Zipping, please wait..
    echo wScript.Sleep 12000 >> _zipIt.vbs
    CScript  _zipIt.vbs  %TEMPDIR%  %OUTPUTZIP%
    del _zipIt.vbs
    rmdir /s /q  %TEMPDIR%

    @ECHO *******************************************
    @ECHO      ZIP Completed
Run Code Online (Sandbox Code Playgroud)


小智 5

从 Windows 10 build 17063 开始,您可以使用 TAR。 MSDN链接

例如,要为文件夹 Reports 中名为文件夹 XYZ 的目录创建 zip 文件,您可以在命令提示符中输入以下内容。

tar -cf XYZ.zip \Reports\XYZ
Run Code Online (Sandbox Code Playgroud)