下午好,
我正在尝试删除名称中包含数字的特定位置的文件夹,该数字可以是数组中的任何数字。
my_table
请在下面查看以下文件夹的示例:
如果我改为将“ VersionArray”数组更改为变量“ 18”,它将开始删除文件夹。它似乎并没有遍历数组的每个数字。我需要将其作为数组以确保脚本的未来使用,因为该数字表示OneDrive的版本。
谢谢您的关注。
答案 0 :(得分:1)
从您最初的想法开始,到子文件夹名称中必须包含的项目列表,我们可以这样做:
$Versionarray = 13..20
Get-ChildItem "$env:LOCALAPPDATA\Microsoft\OneDrive" -Recurse | Where-Object {
$item = $_
$item -is [System.IO.DirectoryInfo] -and (
$Versionarray | Where-Object { $item.Name.Contains($_) }
)
} | Remove-Item -WhatIf
注意:
Get-ChildItem
返回文件夹中的所有子文件夹和文件。如果不需要,请放下-Recurse
。Where-Object
根据条件过滤任何对象列表。除0,$ false,$ null或空字符串/空列表以外的任何结果都将被视为$ true。只要根本没有返回任何内容,就不必实际返回$true
。$_
是管道中的“当前项目” $foo -is [Fully.Qualified.ClassName]
检查对象是否属于某个类。在这种情况下,我们只想查看System.IO.DirectoryInfo
objects而忽略所有文件。$Versionarray | Where-Object { $item.Name.Contains($_) }
将$ Versionarray过滤到文件夹名称中包含的那些元素。您可以使用.StartsWith()
或.NET strings的任何其他方法代替。Where-Object
过滤器的对象都传递给Remove-Item
-WhatIf
执行空转,在确定会发生正确的事情时将其放下。