从文本文件中读取值并输出某些值

时间:2014-10-13 18:08:27

标签: windows shell batch-file scripting

我正在研究一些自定义备份脚本,我想要做的最后一点让我难过。

通过帖子搜索,并没有找到我想要做的解决方案。

我需要在值中读取一个文本文件,该文件是该命令的结果,该文件创建了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%

提前感谢任何指导和示例!

2 个答案:

答案 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个字节。如果您可能有多个文件超出最大长度,那么您将不得不想出一种方法一次将一个文件编写成电子邮件。