【问题标题】:Read in values from a text file and output certain values从文本文件中读取值并输出某些值
【发布时间】:2014-10-13 18:08:26
【问题描述】:

我正在制定一些自定义备份脚本,而我想做的最后一点让我很困惑。

搜索了帖子,并没有找到解决我正在尝试做的事情的方法。

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

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

【问题讨论】:

    标签: windows shell batch-file scripting


    【解决方案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,大文件大小可以正常工作,因为在 IF 比较中,大于 2147483647 的数字被视为等于 2147483647,当然大于 100。请参阅Rules for how CMD.EXE parses numbers
    【解决方案2】:

    可以使用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 字节。如果您可能有许多文件超过了最大长度,那么您将不得不想出一种方法来一次编写一个文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多