首页 > 解决方案 > 根据内容移动 .csv 文件

问题描述

我想搜索 .csv 文件的文件夹并选择那些包含早于某个日期的日期值的文件。一旦我有了文件,我只想将它们移动到另一个文件夹位置。我已经尝试过了,但得到错误“移动项目:输入对象不能绑定到命令的任何参数,因为命令不接受管道输入,或者......”

$Date = (Get-Date).AddDays(-60).Date

$CsvFiles = Get-ChildItem -Path "D:\IMPORT" -Filter *.csv

foreach ($csv in $CsvFiles){
$group = Import-Csv -Path $CsvFiles.FullName | 
Where-Object {$_."Received Date" -as [datetime] -lt $Date} | 
Sort-Object 'Order ID' -Unique | 

forEach-Object {
$_.Group | Move-Item -Path $csv.FullName -Destination D:\EXPORT\$($csv.Name) -Force}}

该代码正在处理文件的移动。我认为 Move-Item 不需要 -Path 因为它应该已经存在于管道中。但是,不提供路径会导致 Path Null 错误。

非常感谢任何帮助。

标签: powershellcsv

解决方案


除非我不明白您要做什么,否则应该可以。如果脚本正在执行您期望的操作,请
移除-WhatIf开关:Move-Item

$Date = (Get-Date).AddDays(-60).Date

$CsvFiles = Get-ChildItem -Path "D:\IMPORT" -Filter *.csv

$toMove = foreach($csv in $CsvFiles)
{
    $shouldMove = Import-Csv -Path $csv.FullName |
    Where-Object {
        $_.'Received Date' -as [datetime] -lt $Date
    } | Select-Object -First 1

    if($shouldMove)
    {
        $csv.FullName
    }
}

Move-Item -Path $toMove -Destination D:\EXPORT\ -Force -WhatIf

推荐阅读