【问题标题】:Powershell script for deleting folders starting with a '.' doesn't work - why?用于删除以“。”开头的文件夹的 Powershell 脚本不起作用 - 为什么?
【发布时间】:2019-05-14 21:25:41
【问题描述】:

我整理了一个用于删除特定文件夹的简单 powershell 脚本:

gci -include .vs -recurse | remove-item -force -recurse

但是 .vs 文件夹不会被删除(如果点被删除,那么名为“vs”的文件夹会被删除)。我一定是错过了什么。

$PSVersionTable.PSVersion

报告:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      16299  666

我通过文件浏览器“右键单击 -> 运行 Powershell 脚本”运行脚本。不知道这是否会使脚本在最新最好的 powershell 版本下运行。

更新:

原来罪魁祸首是 .vs 文件夹被标记为“只读”。由于某种原因,即使确实指定了“-force”标志,powershell 脚本也无法将其删除。对此有什么可以做的吗?

【问题讨论】:

  • 什么版本的powershell?我无法在 5.1 中重现这一点。它似乎对我有用。
  • 使用-filter 而不是-include
  • 我已经更新了提到Powershell版本的答案。我试过 -filter 但它也没有用。我应该提一下,当在同一目录中打开 .sln 文件时,Visual Studio 会自动创建 .vs 文件夹。它被标记为只读+隐藏在属性中,以防它有任何意义。
  • 所有优秀的 IDE 和文本编辑器都可以做到这一点。创建此文件夹是为了缓存文件并改善您的体验。此外,以. 开头的文件夹默认隐藏在 *nix 上,在 Windows 上,您还必须将 hidden 属性设置为 true 或 false。这有助于您在 *nix 机器上打开项目。
  • 我知道你提到的一切。如何通过脚本自动删除这些点文件夹,这就是这里的问题:)

标签: windows shell powershell scripting


【解决方案1】:

您在评论中提到要删除的目录同时设置了HiddenReadOnly 文件系统属性

虽然-Force 在您的Remove-Item 调用中 能够强制删除具有ReadOnly 属性的项目,但您的输入 Get-ChildItem调用也需要-Force,否则它不会找到隐藏文件和文件夹,所以Remove-Item 也永远不会看到它们:

# Note the -Force added to Get-ChildItem.
Get-ChildItem -Force -Include .vs -Recurse | Remove-Item -Force -Recurse -WhatIf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    相关资源
    最近更新 更多