我有两个问题或两部分问题:
我有一个包含完整路径的文件列表的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
Timespan = 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}
但是我正在努力让这个工作起作用。
然后我需要将output.csv
文件传递给robocopy
,它本身不支持它,因此可能需要使用循环来调用robocopy
,以复制文件从一个地方到另一个地方。
希望这是有道理的。
答案 0 :(得分:2)
如果有多个文件具有相同的文件名,请注意下面的解决方案不起作用。您需要添加的唯一内容是某种形式的源基地址(构建文件结构)和目标基址,并根据这些地址构建新的目标路径。
$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:\temp\filelist.csv -NoTypeInformation
由于您只想一次复制一个项目,我不确定是否看到了使用robocopy的好处。在下面的例子中,我刚刚使用了Copy-Item。如果您真的想使用robocopy,那么通过调用robocopy来取代该调用应该不难。
Import-Csv C:\temp\filelist.csv |
Foreach { Copy-Item -Path $_.FullName -Destination "C:\temp\output\$($_.Name)" }
如果您之后不想实际使用.csv文件,则可以轻松跳过该部分,并使用Select
语句替换Export-Csv
和Foreach
导入部分(当然也可以跳过Import-Csv
)。
编辑:按照问题中的要求将流程拆分为两部分。