gpt4 book ai didi

powershell - FolderItem.Name 确实返回不带文件扩展名的名称

转载 作者:行者123 更新时间:2023-12-02 11:02:28 25 4
gpt4 key购买 nike

  1. 创建文件,例如 C:\randomname\file.txt ,
  2. 现在通过 PowerShell 运行以下脚本:

    $shell = new-object -com shell.application  
    $folder = $shell.NameSpace("C:\randomname")
    $folder.Items() | where {$_.Name -eq "file.txt"}
  3. 观察到没有产生任何输出,这是相当意外的。

除了修改 Windows 设置之外,您知道如何以合理的方式解决这种情况吗?

编辑:

为了防止混淆,这只是我实际问题的精简版本。我使用 shell.application 的原因而不是Get-ChildItem那是我的randomname文件夹实际上是压缩的,即我有 randomname.zip我的实际代码如下所示:

$shell = new-object -com shell.application  
$zip = $shell.NameSpace("C:\randomname.zip")
$folder = $zip.Items() | where {$_.Name -eq "randomname"}
$folder.GetFolder.Items() | where {$_.Name -eq "file.txt"}

最佳答案

FolderItem.Name返回值取决于特定 Windows 设置的值。请尝试以下操作:

  1. 打开控制面板,
  2. 文件夹选项,“查看”选项卡,
  3. 取消选中隐藏已知文件类型的扩展名

重新运行脚本,您将看到预期的输出:

Application : System.__ComObject
Parent : System.__ComObject
Name : file.txt
Path : C:\randomname\file.txt
...

我试图编写一个可移植脚本,但在了解 Name 的工作原理后,这似乎相当困难,因为我无法控制客户的 Windows 设置,而且没有像 FullName< 这样的东西FolderItem 所以我无法找出可靠的出路。

编辑:

根据 Nick Sedgewick 的建议,.Path 始终返回带有扩展名的文件名,与 .Name 不同,我能够创建一个不依赖于Windows 设置如下所示:

$shell = new-object -com shell.application  
$folder = $shell.NameSpace("C:\")
$folder.Items() | where {(split-path $_.Path -leaf) -eq "file.txt"}

关于powershell - FolderItem.Name 确实返回不带文件扩展名的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26932938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com