指.CSV 作为文件名,然后递归查找和删除文件



我正在尝试编写一个PowerShell脚本,该脚本引用了禁止文件名列表(主要是游戏)的CSV文件,并将其从用户的主文件夹中删除。我已经让它在根目录或目标目录中工作,但似乎无法使其递归,因此尽管尝试使用 -recurse 参数,但它仍向下钻取子文件夹。

正如你将看到的,我不是一个程序员,但我正在努力学习和提高自己。我的PS脚本看起来像这样:

cd "C:Test user"
Import-Csv "C:Games.csv" | foreach {Remove-Item $_.Game -Verbose -Recurse}

我的 CSV 文件如下所示:

游戏
,游戏1.swf,游戏2.swf,游戏3.swf

关于我缺少什么以使这项工作递归的任何建议将不胜感激。提前感谢大家如此慷慨地抽出时间。

您误解了 CSV 的结构。 本质上,CSV 是一种存储表格数据(按行和列组织的数据)的方法。如果您希望文件与您发布的代码一起使用,则必须具有以下结构:

游戏游戏1.swf游戏2.swf游戏3.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:rootfolder'
$items = (Get-Content "C:Games.csv") -split ',' | Select-Object -Skip 1
Get-ChildItem $root -Recurse -Force |
  Where-Object { $items -contains $_.Name } |
  Remove-Item -Verbose

最新更新