如何包含多个路径? 例如:
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 命令来实现,并且有一个方面需要明确:pushd 和 popd 命令顺序颠倒了 - 解释如下:
假设内部堆栈为空:您位于 ${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/