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

pra*_*een 33 powershell

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

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

Joe*_*oey 73

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

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

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

    Where { $_.PSIsContainer } |
    
    Run Code Online (Sandbox Code Playgroud)
  3. 按日期排序,降序,因此最新的文件夹是第一个.

    Sort CreationTime -Descending |
    
    Run Code Online (Sandbox Code Playgroud)
  4. 选择第一个(最新)文件夹.

    Select -First 1
    
    Run Code Online (Sandbox Code Playgroud)

简而言之:

gci c:\temp | ? { $_.PSIsContainer } | sort CreationTime -desc | select -f 1
Run Code Online (Sandbox Code Playgroud)

要么

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

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


编辑: PowerShell 3有额外的参数Get-ChildItem,允许您直接过滤文件或文件夹,所以你不需要Where:

Get-ChildItem -Directory C:\temp | ...
Run Code Online (Sandbox Code Playgroud)

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

Get-ChildItem | gm
Run Code Online (Sandbox Code Playgroud)

会告诉你文件和目录有哪些属性.

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

  • stej:嗯,这个也是一个快速回答.然后我感到无聊并拖延了实际的工作,它变成了这个;-) (3认同)