复制超过3个月的Wav文件进行存档,创建年/月路径

时间:2015-07-24 15:45:13

标签: powershell

我希望有人可以帮我解决这个令我困惑的脚本,我对PowerShell并不擅长;)

我想要实现的是一个脚本,它将扫描我的源文件夹和子文件夹,查找超过60天的* .wav文件,然后将它们移动到存档目标,创建一个文件夹结构\年\月

这就是我所拥有的

$SourceDir = "d:\test"
$DestinationDir = "e:\test"
$files = get-childitem $SourceDir *.wav
foreach ($file in $files) 
{
$Directory = $DestinationDir + "" + $file.CreationTime.Date.ToString('yyyy') + "\" + $file.CreationTime.Date.ToString('MM-MMM')
if (!(Test-Path $Directory))
{
New-Item $directory -type directory
}
where-object {$_.LastWriteTime -lt (get-date).AddDays(-61)} | move-item $file.fullname $Directory
}

脚本运行时没有错误但不移动文件:/

-

根据Keiths的评论,我的脚本看起来如此:

$SourceDir = "d:\test\"
$DestinationDir = "e:\test\"
$date = (get-date).AddDays(-91)
$files = get-childitem -literalpath $SourceDir *.wav
foreach ($file in $files) 
{
$Directory = $DestinationDir + "" + $file.CreationTime.Date.ToString('yyyy') + "\" + $file.CreationTime.Date.ToString('MM-MMM')
if (!(Test-Path $Directory))
{
New-Item $directory -type directory
}
if ($file.LastWriteTime -lt $date) {
    Write-Host $file
    move-item -LiteralPath $file.fullname -Destination $Directory
}
}

并且工作正常!谢谢基思

1 个答案:

答案 0 :(得分:0)

Where-Object永远不会出现在管道的开头。它需要输入来填充您通常用于比较的$_变量。将该行替换为:

if ($file.LastWriteTime -lt (get-date).AddMonths(-3)) {
    move-item $file.fullname $Directory
}

虽然我会计算循环之外的日期:

$date = (get-date).AddMonths(-3)

在循环中使用它:

...
if ($file.LastWriteTime -lt $date) {
    Move-Item -LiteralPath $file.fullname -Destination $Directory
}
...