windows - 如何在 Windows 上批量推送多个文件夹

标签 windows batch-file cmd

如何包含多个路径? 例如:

pushd C:\Users\Downloads\back\dotNet 
      C:\Users\Downloads\back\MySQL

并排除所有扩展名为 .log 的文件

7za.exe a -tzip -mx5 -x!\*.log* "C:\Users\Desktop\Downloadbak-%TODAY%.zip"
popd


ECHO.

PAUSE

最佳答案

这里其实有2个问题:

  • 推送

  • 7z(a).exe

关于 pushd:对您的问题的简单回答是:无法完成
pushd(推送目录)和popd(弹出目录)在类似结构的堆栈上操作 - 堆栈上的操作是push流行

  • push 有一个参数并将其插入到当前栈顶(最后插入的元素)(如果有的话),因此成为栈顶
  • pop 简单地取出堆栈的顶部并使堆栈的下一个元素(如果有的话)成为顶部

所以:

  • pushd 将当前 dir (%CD%) 插入内部堆栈的顶部,并将当前目录更改为它得到了一个论点
  • popd 将当前目录更改为(同一)内部堆栈的顶部,并将其从堆栈中删除

但是您需要的行为可以通过一系列 pushd/popd 命令来实现,并且有一个方面需要明确:pushdpopd 命令顺序颠倒了 - 解释如下:

假设内部堆栈为空:您位于 ${DIR1}(这是文件系统中某处的目录完整路径)。请注意,Nix 样式变量 (${...}) 只是(目录)占位符:

  • 你执行:

    pushd ${DIR1}
    
  • 这在堆栈中插入了 ${DIR1} 并将您当前的 dir 更改为 ${DIR2}(这是你位于)。然后你执行:

    pushd ${DIR3}
    
  • 这会将 ${DIR2} 插入堆栈(在 ${DIR1} 之上)并更改当前 dir${DIR3}(这是您所在的位置)。现在,你做你的操作,想回来,所以你执行:

    popd
    
  • 这会从堆栈中取出 ${DIR2}(最后一个 pushded)并将当前目录更改为它(您将位于 ${DIR2})。最后再次执行时:

    popd
    
  • ${DIR1} 正在从堆栈中移除(因此堆栈变为空 - 就像开始时一样)并将当前目录更改为它,因此您将位于 ${DIR1} 就像在第一个st pushd 命令之前

现在,关于 7zip 可执行文件(我看到您键入了 7z a.exe,而在我的计算机上是 7z .exe(刚刚安装):

看起来你的过滤器非常好,但它只从当前目录中删除日志文件,子目录似乎忽略了 -x 标志。因此,我进行了测试,结果表明,如果我通过 -r(递归),它还会从子目录中删除所有 .log 文件(尽管我可以'不要解释为什么你的模式不适用于目录——也许它只涉及基本文件名?)。

这是命令(注意我删除了 * 之前的 \:

7z.exe a -tzip -mx5 -r -x!*.log somefile.zip

关于windows - 如何在 Windows 上批量推送多个文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32405543/

相关文章:

java - 用于检查 Java 主目录并比较 java 版本的批处理脚本

windows - BAT 文件 : strange SET(? ) 行为

windows - 文件名带有 .在批处理文件中

c++ - 获得本地主机名,在 Windows 上工作,但在 Linux 上不行

c# - 从 bat 文件运行 Java .jar 和 Windows .exe

windows - < 这时候出乎意料。在将输入数据作为 xml 发布到休息服务时从 curl 命令行

c++ - 如何只检测卷上已删除、已更改和已创建的文件?

ruby - 如何从 bash 脚本同时启动多个 Ruby 脚本

batch-file - 在批处理文件中引发异常

C# 我可以将命令提示符控件添加到我的应用程序吗