如何将目录名称传递给Remove-Item?

时间:2014-06-17 13:58:47

标签: powershell piping

我对powershell不太了解,所以感谢任何帮助。

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

  
      
  • E:\概况   
        
    • 用户名   
          
      • 文档
      •   
      • OtherFolders
      •   
      • DirectoryToDeleteFrom   
            
        • FileToDelete.txt
        •   
      •   
    •   
    • UserID2   
          
      • ...
      •   
      • ...
      •   
    •   
  •   

我可以使用以下命令删除我需要访问的所有文件,但由于它在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 char: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'}

那我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

如果你动态构造一个字符串,用另一个命令进行内联,那么在路径周围加上括号:

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