我尝试编写PowerShell脚本,该脚本引用CSV文件以获取禁止文件名(主要是游戏)的列表,并将其从我的用户中删除。家庭文件夹。我已经让它在根目录或目标目录中运行,但似乎无法使其递归,因此尽管尝试使用-recurse
参数,它仍可通过子文件夹向下钻取。
正如你所看到的,我不是一个程序员,但我正在努力学习和改善自己。我的PS脚本如下所示:
cd "C:\Test user"
Import-Csv "C:\Games.csv" | foreach {Remove-Item $_.Game -Verbose -Recurse}
我的CSV文件如下所示:
Game,Game1.swf,Game2.swf,Game3.swf
为了使这项工作递归,任何关于我所缺少的建议都会非常感激。提前感谢大家对时间的慷慨。
答案 0 :(得分:0)
你误解了CSV的结构。基本上,CSV是一种存储表格数据的方法(按行和列组织的数据)。如果您希望它与您发布的代码一起使用,则您的文件必须具有以下结构:
Game Game1.swf Game2.swf Game3.swf
您发布的数据只是逗号分隔的值列表。要处理此字符串,您需要以下内容:
(Get-Content "C:\Games.csv") -split ',' | Remove-Item -Verbose -Recurse
或者可能是这样(如果你想跳过第一个元素):
(Get-Content "C:\Games.csv") -split ',' |
Select-Object -Skip 1 |
Remove-Item -Verbose -Recurse
编辑:如果您需要以递归方式在文件夹树中搜索CSV中的文件,然后只删除您执行此操作的文件,如下所示:
$root = 'C:\root\folder'
$items = (Get-Content "C:\Games.csv") -split ',' | Select-Object -Skip 1
Get-ChildItem $root -Recurse -Force |
Where-Object { $items -contains $_.Name } |
Remove-Item -Verbose