使用powershell从路径获取最新创建的文件夹

时间:2011-09-12 22:12:07

标签: powershell

如何使用Windows PowerShell从路径获取最新创建的文件夹?

我有路径C:\temp,我想在此路径中找到最近创建的文件夹。

1 个答案:

答案 0 :(得分:71)

PowerShell主要使用管道,因此您编写的大部分内容将包括创建表示某些信息的对象,以及过滤和操作它们。在这种情况下,对象是一堆文件夹。

  1. 获取文件夹中的所有项目。这将获取文件文件夹,这就是为什么第2步是必要的。该行末尾的|表示管道将在下一行继续 - Get-ChildItem创建的对象将逐个传递给另一个命令。

    Get-ChildItem c:\temp |
    
  2. 过滤文件夹。可悲的是,没有真正优雅的方式。不要担心它说“容器”,而不是“文件夹” - 这些命令可以处理许多不同的东西,不仅仅是文件和文件夹,因此在命名时使用了更为通用的概念。

    Where { $_.PSIsContainer } |
    
  3. 按日期排序,降序,因此最新的文件夹是第一个。

    Sort CreationTime -Descending |
    
  4. 选择第一个(最新的)文件夹。

    Select -First 1
    
  5. 简而言之:

    gci c:\temp | ? { $_.PSIsContainer } | sort CreationTime -desc | select -f 1
    

    (gci c:\temp | ? { $_.PSIsContainer } | sort CreationTime)[-1]
    

    这两行都大量使用PowerShell中的命令的默认别名,例如? Where-Object。但是,您应该在脚本中使用全名,因为您永远不会知道代码可能在其他机器上运行的别名。


    编辑:PowerShell 3还有Get-ChildItem的其他参数,可让您直接对文件或文件夹进行过滤,因此您不需要Where

    Get-ChildItem -Directory C:\temp | ...
    

    通常,您将在PowerShell中使用对象及其属性。两个非常有用的命令是Get-Member及其别名gmGet-Command或仅gcmGet-Member将告诉您对象具有哪些属性和方法;你只需将其他东西输入其中:

    Get-ChildItem | gm
    

    将告诉您文件和目录的属性。

    Get-Command将列出所有命令或与特定模式匹配的命令。 PowerShell命令在动词和名词的使用方面尝试非常一致。要查找以Object结尾的所有命令,您可以尝试gcm *-Object - 这些命令几乎可以处理所有事情。 Get-Help ForEach-Object然后会告诉你一个特定的命令,在这种情况下ForEach-Object