【问题标题】:Using System.Uri with Get-ChildItem将 System.Uri 与 Get-ChildItem 一起使用
【发布时间】:2015-08-13 05:29:48
【问题描述】:
  1. 我需要生成过去 7 天内已更改的文件列表。据我所知,这是一种方法:

    Get-ChildItem | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-7)}
    
  2. 我只想“捕获”文件所在的基本目录。例如,如果文件位于路径“c:\dir1\dir2\dir3”中,我只想捕获“dir1” " 目录(我不需要根路径)。据我所知,这是一种方法:

    ([System.Uri]"c:\dir1\dir2\dir3").segments[2]
    
  3. 问题是我不明白如何组合前面的流程。如何根据第 2 项中描述的过程结果生成相关目录列表(如第 2 项中所述)。 1.

  4. 我想即使我们能够实现我想要做的事情(如第 3 项中所述),我们也会得到很多重复的结果,这不会让您感到惊讶。

即使我试图仅实现第 1 项中描述的内容。 1,并尝试删除重复项,但没有按预期工作。

我使用了以下命令(请注意Get-Unique cmdlet):

Get-ChildItem | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-7)} |
  select directory | Get-Unique | Out-GridView

我做错了什么?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    对于3),在管道中使用ForEach-Object处理每个元素(用$_表示):

    Get-ChildItem | Where{$_.LastWriteTime -gt (Get-Date).AddDays(-7)} | ForEach-Object { ([System.Uri]$_.FullName).segments[2] } | Get-Unique | Out-Gridview
    

    【讨论】:

    • 当我尝试运行它时,我在 PowerShell 控制台中收到以下错误:无法将“System.IO.DirectoryInfo”类型的“bla”值转换为“System.Uri”类型。在 line:1 char:88 + ... AddDays(-7)} | ForEach-Object { ([System.Uri]$_).segments[2] } | Out ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [], RuntimeException + FullyQualifiedErrorId : ConvertToFinalInvalidCastException
    • 我验证了当我尝试投射和分割特定文件时,一切正常。上面提到的错误似乎只是对管道中的每个对象进行了上面提到的操作。
    • @kurkum 你试过编辑过的版本吗?它对我有用。
    • 感谢briantist,编辑后的版本解决了项目编号。 3 在我的问题中。但是,项目编号的问题。 4仍然坚持。以下方法均无效,仍然存在重复结果: 1) Get-ChildItem -recurse |其中{$_.LastWriteTime -gt (Get-Date).AddDays(-7)} | ForEach-Object { [string](([System.Uri]$_.FullName).segments[2].trim("/")) } |获得独特 | Out-Gridview 2) Get-ChildItem -recurse |其中{$_.LastWriteTime -gt (Get-Date).AddDays(-7)} | ForEach-Object { ([string]$_.FullName).split("\")[2] } |外网格视图
    • 似乎 get-unique 不会将结果作为实际字符串处理,因为它不会删除所有重复项。使用 -recurse 参数时,结果之一是取自此特定文件夹路径的子文件夹名称,如果此子文件夹中有文件或目录,则其他结果将相同,但取自引用此子文件夹的子文件夹的路径。换句话说,“c:\dir1”和“c:\dir1\dir2”将产生相同的结果,即“dir1”。出于某种原因,get-unique 不会将这些结果识别为重复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2012-08-10
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    相关资源
    最近更新 更多