我正在研究一些自定义备份脚本,我想要做的最后一点让我难过。
通过帖子搜索,并没有找到我想要做的解决方案。
我需要在值中读取一个文本文件,该文件是该命令的结果,该文件创建了activebackup目录中每个ZIP文件的列表及其大小
forfiles /p f:\activebackup /s /m *ZIP /c "cmd /c echo @fname @fsize" > c:\scripts\output\filesize.txt
输出非常多:
server_name1-date.zip 23454623
server_name2-date.zip 7862457
server_name3-date.zip 22
server_name4-date.zip 98
etc
我需要读入所有条目(For循环?)并仅输出大小为100或更小的行。然后能够将输出用作变量,因此变量(基于上面的日期)将是server_name3-date.zip 22,server_name4-date.zip 98。
这样我就可以在一个作业中使用该变量,该作业生成一个现有的电子邮件,其中添加了一行,如:
echo The following ZIPs are too small: %value_too_small%
提前感谢任何指导和示例!
答案 0 :(得分:1)
给它一个测试。批量数学失败超过2GB大小,但它可能适用于较小的大小。
forfiles /p f:\activebackup /s /m *ZIP /c "cmd /c if @fsize LEQ 100 echo @fname @fsize" > c:\scripts\output\filesize.txt
答案 1 :(得分:0)
可以使用FORFILES,但速度非常慢。使用带有/ R选项的简单FOR循环要快得多。 ~z
修饰符提供文件大小。
@echo off
setlocal enableDelayedExpansion
set "tooSmall="
for /r "f:\activebackup" %%F in (*.zip) do if %%~zF leq 100 set "tooSmall=!tooSmall!"%%~fF", "
set "tooSmall=!tooSmall:~0,-2!"
如果文件路径包含!
,则上述代码将失败,因为在FOR循环展开时启用了延迟扩展。如有必要,有解决办法。
另外,请记住,环境变量的长度限制为~8191个字节。如果您可能有多个文件超出最大长度,那么您将不得不想出一种方法一次将一个文件编写成电子邮件。