0

您好我正在尝试编写一个批处理文件,该文件将搜索一些目录并输出一个文本文件报告,其中包含最后一天在特定文件大小之间保存的文件列表。

文件大小部分没有问题 - 但是如何解析日期并根据今天的日期检查它,并将其添加到“if”语句中?

这是我到目前为止所拥有的:

@echo Report will open when complete
@echo Working
@echo off
setlocal
set "SEARCH_DIR=f:"
set "MIN_SIZE=1"
set "MAX_SIZE=300000"
set "REPORT=F:\Error_report.txt"

echo **************************************************** >> %REPORT%
echo File report %date% %time% >> %REPORT%
echo File size %MIN_SIZE% to %MAX_SIZE% >> %REPORT%
echo **************************************************** >> %REPORT%

echo File list: >> %REPORT%

for /R "%SEARCH_DIR%" %%F in (*) do (
   if exist "%%F" if %%~zF LSS %MAX_SIZE% if %%~zF GEQ %MIN_SIZE% echo %%F >> %REPORT%
)

@echo Done

START %REPORT%

我已经尝试添加if forfiles /d +1到 if 语句 - 但这不起作用!

任何帮助,将不胜感激。

4

3 回答 3

1

您可以为此使用GNU find for Windows

 find * -size +1k -mtime -1
-大小 n[c]
    如果文件大小(以字节为单位,除以 512 并向上取整到下一个整数)为 n,则主节点应评估为真。如果 n 后跟字符“c”,则大小应以字节为单位。
-atime n
    如果从初始化时间中减去的文件访问时间除以 86400(丢弃任何余数)为 n,则主节点应评估为真。
-ctime n
    如果从初始化时间中减去文件状态信息的最后更改时间除以 86400(丢弃任何余数)为 n,则主节点应评估为真。
-mtime n
    如果从初始化时间中减去的文件修改时间除以 86400(丢弃任何余数)为 n,则主节点应评估为真。

操作数

    应支持以下操作数:

    路径操作数是目录层次结构中起点的路径名。

    第一个以“-”开头的参数,或者是“!” 或'(',并且所有后续参数都应解释为由以下基本元素和运算符组成的表达式。在描述中,无论 n 用作主要参数,它都应解释为可选地前面有 a 的十进制整数加号('+')或减号('-'),如下:

    +n
        超过 n。
    n
        正是 n。
    -n
        小于 n。


于 2013-08-26T22:04:41.053 回答
1

我认为PowerShell在这里应该更合适:

function Get-ErrorReport {
  param(
    [string]$Path = 'F:\',
    [long]$MinSize = 1,
    [long]$MaxSize = 300000,
    [string]$OutputPath = 'F:\Error_report.txt'
  )

  Get-ChildItem -Recurse $Path |
    Where-Object {
      $_.Length -ge $MinSize -and
      $_.Length -le $MaxSize -and
      $_.LastWriteTime -gt (Get-Date).AddDays(-1)
    } |
    Select-Object -ExpandProperty FullName |
    Out-File $OutputPath

  Invoke-Item $OutputPath
}

以各种方式调用

Get-ErrorReport
Get-ErrorReport -MinSize 1KB -MaxSize 10MB
Get-ErrorReport -Path X:\ -OutputPath X:\report.txt
...
于 2013-08-26T22:12:28.633 回答
0

为什么不直接使用该find实用程序?您可以在一次调用中过滤文件并将其包装在一些文本中。一个例子:

find Documents/ -daystart -mtime "1" -size +1k

有关详细信息,请参阅手册页,互联网上也有数百万个示例。

于 2013-08-26T20:29:56.423 回答