我正在尝试从文件夹中压缩最后修改过的文件以帮助我使用bat文件
的工作流程但是它给出了错误
user name
这是我的完整代码
ERROR: No files found with the specified search criteria.
我很确定今天有文件上次修改。我认为它不认识sourcedir?我在报价中遗漏了吗?
答案 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。
的文章