请参阅.CSV获取文件名,然后递归地查找和删除文件

时间:2016-01-19 09:14:52

标签: csv powershell subdirectory

我尝试编写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

为了使这项工作递归,任何关于我所缺少的建议都会非常感激。提前感谢大家对时间的慷慨。

1 个答案:

答案 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