我有两个问题或两部分问题:
-
我有一个CSV文件,其中包含包括完整路径的文件列表,例如:
C:file1.txt C:file2.xls C:file3.doc etc.
我需要检查每个文件的修改日期,如果在特定的时间跨度内,则将其输出到新的CSV文件,例如:
时间跨度 = 02/01/2014 8:00C: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
至 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
,将文件从一个位置复制到另一个位置。
希望这是有道理的。
请注意,如果有多个文件具有相同的文件名,则下面的解决方案将不起作用。然后,您唯一需要添加的是某种形式的源基址(从中构建文件结构)和目标基址,然后基于这些构建新的目标路径。
$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 文件,您可以轻松跳过该部分并将Select
和Export-Csv
替换为 Import-part 中的 Foreach
语句(当然也可以跳过Import-Csv
)。
编辑:按照问题中的要求,将该过程分为两部分。