【问题标题】:Date modified of most recent file(s) in a set of sub-directories一组子目录中最近文件的修改日期
【发布时间】:2015-04-22 19:29:25
【问题描述】:

在创建基于一堆子文件夹的输出文件(或“报告”)时,我需要一些帮助。我想每晚将此报告通过电子邮件发送给自己(我可以处理文件的电子邮件发送,只是不确定如何创建实际文件)。

我的数据结构:

  • 主工作目录包含:
    • 我的 .bat 文件将数据从 3 个服务器复制到下面的 TFX Logs 文件夹
    • TFX 日志文件夹
      • 客户端文件夹
        • 最多 15 天的 .log 文件

我想做的事:

  1. 将数据从 3 个服务器复制到 TFX Log 文件夹,保持结构 (TFX Log\Client\TFX_*.log) (COMPLETED)
  2. 创建一个 .txt 或 .csv 文件,其中包含每个客户端文件夹中最新的 TFX_*.log 文件的列表(只是最新的 - 不是所有 15 个文件)。像这样的:

    目录名称 |文件名 |修改日期

  3. 通过电子邮件将文件发送给我自己(已完成

我只需要关于 2 号的帮助。

这是我目前所拥有的:

:: Copying data

XCOPY "%source1%" "%destination%\TFX Logs\" /s /y
XCOPY "%source2%" "%destination%\TFX Logs\" /s /y 
XCOPY "%source3%" "%destination%\TFX Logs\" /s /y 

:: Deleting old output file before creating new one

DEL "%destination%\*.txt"

:: Creating new output file

powershell "& '%destination%\ListFiles.ps1'"

REN "%destination%\ImportReport.txt" ImportReport_%tday%.txt

我的 Powershell 脚本如下所示:

Get-ChildItem "..Daily Report\TFX Logs\" -recurse -file | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-1)} | Out-File "..Daily Report\ImportReport.txt"

我现在得到的是:

(如果可能,我只想要使用上面#2 中指定的结构的每个文件夹中的最新文件)

    Directory: ..\TFX Logs\Client1


Mode                LastWriteTime     Length Name                              
----                -------------     ------ ----                              
-a---         4/22/2015   3:06 AM        329 TFX_db21_1522040304.log           


Directory: ..\TFX Logs\Client2


Mode                LastWriteTime     Length Name                              
----                -------------     ------ ----                              
-a---         4/22/2015  12:22 AM        331 TFX_db4_1522040017.log            


Directory: ..\TFX Logs\Client3


Mode                LastWriteTime     Length Name                              
----                -------------     ------ ----                              
-a---         4/21/2015   8:03 PM        329 TFX_db4_1521042002.log  

悬崖笔记:

我想将 PowerShell 的输出重新排列为:

目录名称(目录)|文件名(名称) |上次修改日期 (LastWriteTime)

没有所有其他的东西和所有的空白。只是一个不错的逐行输出。

另外,如果可能的话,如果那里有一个空白文件夹(或者有一个文件夹包含超过 15 天的文件),仍然在报告文件中显示它,但没有记录。这样我就知道了,嘿嘿,这个客户端好久没跑了,需要检查一下。

2015 年 4 月 29 日更新

以下 Magoo 的建议很有希望,但对我没有用。它什么也没做。有人对如何改进我已有的东西有任何其他想法吗?

【问题讨论】:

    标签: windows batch-file command


    【解决方案1】:
    @ECHO OFF
    SETLOCAL
    SET "source1=U:\sourcedir"
    SET "source2=U:\sourcedir2"
    SET "source3=U:\source dir3"
    SET "destdir=U:\destdir"
    
    DEL "%destdir%\*.txt"
    FOR %%d IN ("%source1%" "%source2%" "%source3%" ) DO CALL :process %%d
    
    GOTO :EOF
    
    :process
    ECHO(XCOPY %1 "%destdir%\TFX Logs\" /s /y
    PUSHD %1
    FOR /f %%a IN ('dir /b /o-d TFX_*.log') DO >>"%destdir%\ImportReport_%tday%.txt" (
     ECHO %~1,%%~ta,%%~za,%%a
     popd
     GOTO :eof
    )
    popd
    GOTO :eof
    

    这应该可以解决您的问题。

    为了测试,我使用我的u: 驱动器和destdir 作为目标目录名。

    只需删除目标.txt文件,然后对于目录名称列表,调用一个进程

    • 复制日志文件 所需的 XCOPY 命令只是 ECHOed 用于测试目的。 验证命令正确后,将ECHO(XCOPY 更改为XCOPY 以实际复制文件。附加>nul 以禁止报告消息(例如1 file copied

    • 切换到目标目录

    • 执行与掩码匹配的文件的基本格式的目录列表,按日期倒序排序
    • 输出目录名,文件时间。报告文件的文件大小和名称(我假设您已设置 tday
    • 弹回原始目录并终止循环,以便仅报告 1 个文件名(按时间顺序排列的最后一个)。

    【讨论】:

    • 嗨@Magoo,感谢您的回复。但是,您的脚本似乎没有做任何事情。我替换了必要的变量(目的地等)。窗口只是快速闪烁。我尝试将 TFX Log 文件夹更改为 TFX Log2 以查看它是否会创建一个新目录,但它没有。这是移除了 ECHO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多