我希望有人可以帮我解决这个令我困惑的脚本,我对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
}
}
并且工作正常!谢谢基思
答案 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
}
...