【发布时间】:2020-10-28 07:57:39
【问题描述】:
试图从多个路径中删除文件,
因此创建了一个 csv 文件,例如路径、天数、过滤器
在 shell 中导入此文件并遍历每个对象以删除内容,但 getchilditem 一次又一次地失败, 无法理解背后的原因,
下面是我想要实现的代码
Start-Transcript -Path "D:\delete.log"
$pathlist= Import-csv -LiteralPath "D:\diskpath.csv"
$count = 0
foreach($p in $pathlist){
Write-host $p.path " | " $p.days -ForegroundColor DarkCyan
$path = $p.path
$days = $p.days
$filter = $p.filter
Get-ChildItem -Path $path -Filter $filter | where-object{$_.LastWriteTime -lt [datetime]::Now.AddDays(-$days)}|Remove-Item -Force -Verbose -Recurse -ErrorAction SilentlyContinue -Confirm $false
}
Stop-Transcript
没有for循环,脚本可以正常执行,但是有for循环会失败
如果需要有关此查询的任何进一步信息,请告知, 会喜欢提供相同的, 已经在 SO 上谷歌并阅读了多个问题,但无法找到失败的原因,
【问题讨论】:
-
“失败”是什么意思?没有文件被删除?删除了错误的文件?错误信息?
-
顺便说一句,
Confirm的默认值为 False,因此您可以忽略它或使用正确的语法:-Confirm:$false。另外,请向我们展示您的D:\diskpath.csv文件的前 3 或 4 行的文本,以便我们查看那里是否有任何问题。 -
-Confirm是一个开关参数,在这种情况下默认为$false。如果您想为开关提供变量,请不要使用空格,而是使用:>-Confirm:$false/-Confirm:$VarWithBool。如果您留出空格,则开关参数将被视为$true,而下一个定位参数将获得$false... -
@vonPryz 失败,意味着它没有删除任何文件,也没有显示任何详细信息,但是如果在变量中提供共享路径并且在没有 for 循环的情况下传递它,则它可以工作
标签: powershell automation powershell-4.0