从 CSV 列表中检查在某个时间跨度内修改的文件



我有两个问题或两部分问题:

  1. 我有一个CSV文件,其中包含包括完整路径的文件列表,例如:

    C:file1.txt
    C:file2.xls
    C:file3.doc
    etc.
    

    我需要检查每个文件的修改日期,如果在特定的时间跨度内,则将其输出到新的CSV文件,例如:

    C:file1.txt has modified time and date 01/01/2014 10:00
    C:file2.xls has modified time and date 02/01/2014 12:00
    C:file3.doc has modified time and date 03/01/2014 14:00
    C:file4.ppt has modified time and date 04/01/2014 16:00
    
    时间跨度 = 02/01/2014 8:00

    至 03/01/2014 20:00

    output.csv文件应包含:

    C:file2.xls
    C:file3.doc
    

    尝试修改我在网上找到的现有PowerShell脚本,但老实说不理解代码。我试过使用foreach-object

    $names = get-content .test.csv
    $names | foreach-object {(get-item $_.name).lastwritetime}
    

    但我在工作中摔倒了,让它工作。

  2. 然后我需要将output.csv文件传递给 robocopy ,它本身不支持它,因此可能需要使用循环来调用 robocopy ,将文件从一个位置复制到另一个位置。

希望这是有道理的。

请注意,如果有多个文件具有相同的文件名,则下面的解决方案将不起作用。然后,您唯一需要添加的是某种形式的源基址(从中构建文件结构)和目标基址,然后基于这些构建新的目标路径。

$copyChangesSince = Get-Date "2014-01-08"
$doNotCopyChangesNewerThan = Get-Date "2014-02-02"
get-content .files.txt | Foreach {
        Get-Item $_
    } |
    Where { $_.LastWriteTime -gt $copyChangesSince -AND $_.LastWriteTime -lt $doNotCopyChangesNewerThan } |
    Select FullName, Name |
    Export-Csv C:tempfilelist.csv -NoTypeInformation

由于您一次只想复制一个项目,因此我不确定我是否看到了使用robocopy的好处。在下面的示例中,我刚刚使用了复制项目。如果你真的想使用robocopy,那么用对robocopy的调用来替换这个调用应该不难。

Import-Csv C:tempfilelist.csv |
    Foreach { Copy-Item -Path $_.FullName -Destination "C:tempoutput$($_.Name)" }

如果您不想在之后实际使用 .csv 文件,您可以轻松跳过该部分并将SelectExport-Csv替换为 Import-part 中的 Foreach 语句(当然也可以跳过Import-Csv)。

编辑:按照问题中的要求,将该过程分为两部分。

最新更新