【问题标题】:How to pipe a directory name into Remove-Item?如何将目录名称通过管道传输到 Remove-Item?
【发布时间】:2014-08-07 14:00:03
【问题描述】:

我对 powershell 不是很精通,因此感谢您提供任何帮助。

我有一个保存用户个人资料的驱动器。我需要从每个用户的个人资料中删除特定文件。它的结构是这样的。 (更改名称以保护无辜者。)

  • E:\配置文件
    • 用户 ID
      • 文档
      • 其他文件夹
      • DirectoryToDeleteFrom
        • FileToDelete.txt
    • 用户 ID2
      • ...
      • ...

我可以使用以下命令来删除我需要访问的所有文件,但是它会在 UserID 下的所有其他文件夹中递归,所以速度慢得让人难以忍受。

#this one would work perfectly, but is terribly slow
Get-ChildItem -Path E:\Profiles -Include FileToDelete.txt -Recurse

我确切地知道每个文件所在的位置,所以我认为我可以这样做。

(Get-ChildItem -Path 'E:\Profiles' -Exclude *.lnk)|ForEach-Object{Remove-item -path 'E:\Profiles\' + $_.Name + '\Path\To\File\FileToDelete.txt'}

但我收到以下错误消息:

Remove-Item : 找不到接受的位置参数 参数“+”。在行:1 字符:70 + (Get-ChildItem -Path 'E:\Profiles' -Exclude *.lnk)|ForEach-Object{Remove-item ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Remove-Item], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

我以为是因为我传递了一个错误的文件路径Remove-Item,但下面的命令生成了正确的路径。

(Get-ChildItem -Path 'E:\Profiles' -Exclude *.lnk)|ForEach-Object{'E:\Profiles\' + $_.Name + '\Path\To\File\FileToDelete.txt'}

那么我在这里做错了什么?

【问题讨论】:

    标签: powershell piping


    【解决方案1】:

    如果您动态构造一个字符串以供其他命令内联使用,则在路径周围放置括号:

    ..{Remove-item -path ('E:\Profiles\' + $_.Name + '\Path\To\File\FileToDelete.txt')}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多