我希望有人可以帮我解决这个令我困惑的脚本,我对powershell不太好;)
我要实现的是一个脚本,该脚本将扫描源文件的文件夹和子文件夹,查找超过60天的* .wav文件,然后将其移至存档目标,创建\ year \ month的文件夹结构
这就是我所拥有的
$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
}
}
并且工作正常!谢谢基思
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
}
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句