只有7z zip的Forfiles只有最后修改过的文件

时间:2017-09-15 00:39:34

标签: batch-file 7zip

我正在尝试从文件夹中压缩最后修改过的文件以帮助我使用bat文件

的工作流程

但是它给出了错误

user name

这是我的完整代码

ERROR: No files found with the specified search criteria.

我很确定今天有文件上次修改。我认为它不认识sourcedir?我在报价中遗漏了吗?

1 个答案:

答案 0 :(得分:2)

我建议不要使用命令 FORFILES ,而是使用命令 FOR DIR

@echo off
set "SourceDir=%USERPROFILE%\Documents\Work"
set "ZipName=testing.zip"
set "DestDir=%USERPROFILE%\Documents\Work\result"

for /F "delims=" %%I in ('dir "%SourceDir%\*" /A-D /B /O-D 2^>nul') do 7z.exe a -aoa -tzip "%DestDir%\%ZipName%" "%SourceDir%\%%I" & goto Done

:Done

DIR 在指定的源目录中搜索通配符模式*,因为/A-D(属性不是目录)仅针对文件并因/B而输出它们(裸格式)文件名仅按相反顺序按最后修改日期排序,因为/O-D表示首先输出最新文件。

FOR 逐行 DIR 处理此输出。对于第一行,调用7z.exe将文件压缩到ZIP存档文件中。

然后执行goto :Done以退出 FOR 循环,因为 DIR 找到并输出的所有其他文件都不感兴趣。

我建议在批处理文件中指定7z.exe的完整路径。

2^>nul重定向 DIR 输出的错误消息,如果在设备 NUL 的源目录中找不到文件来禁止它。必须使用插入符>对重定向操作符^进行转义,以便在Windows上解释为文字字符。解析器解析整个 FOR 命令行。在后台由 FOR 打开的单独命令进程中执行 DIR 命令行后,转义字符^已被删除。

另一个版本仅处理设置了存档属性的文件,并清除压缩到ZIP存档文件中的每个文件的存档属性。

@echo off
set "SourceDir=%USERPROFILE%\Documents\Work"
set "ZipName=testing.zip"
set "DestDir=%USERPROFILE%\Documents\Work\result"

for /F "delims=" %%I in ('dir "%SourceDir%\*" /AA-D /B 2^>nul') do (
    7z.exe a -aoa -tzip "%DestDir%\%ZipName%" "%SourceDir%\%%I"
    %SystemRoot%\System32\attrib.exe -a "%SourceDir%\%%I"
)

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • attrib /?
  • dir /?
  • echo /?
  • for /?
  • goto /?
  • set /?

另请阅读Microsoft有关Using Command Redirection Operators

的文章