从 Windows 终端查找可执行文件并运行父目录

从 Windows 终端查找可执行文件并运行父目录

最初,我想以交互方式:

  1. 找到可执行文件的目录(在有限的情况下使用where
  2. 在资源管理器中运行可执行文件的父目录

我在 Windows 中尝试了以下操作cmd

  • 可以从 cmdwhere命令读取 stdout

    where pip 1> myfile.txt
    
  • 然而我真正想要的是

    where pip | cd.. | explorer
    
  • where pip如果可执行文件位于系统环境变量中,则返回包含可执行文件路径的字符串%PATH%。但是,我无法根据返回的字符串找出如何到达父目录where


我在 Power Shell 中找到的解决方案是这样的:

$a = Get-Item((gcm pip.exe).Path); Split-Path -Path $a -Parent | ii

有没有更紧凑这个问题的解决方案?

答案1

这 …

$a = Get-Item((gcm pip.exe).Path); Split-Path -Path $a -Parent | ii

.. 实际上是两个独立的命令。将它们放在一行上确实可以使它成为一行,这似乎是您的用例。

您可以使用 Get-Member cmdlet 来具体查找可以使用的内容。

Get-Item((gcm notepad.exe).Path) | Get-Member


   TypeName: System.IO.FileInfo

Name                      MemberType     Definition                                                                                                               
----                      ----------     ----------                                                                                                               
...                                         
PSChildName               NoteProperty   string PSChildName=notepad.exe                                                                                           
PSDrive                   NoteProperty   PSDriveInfo PSDrive=C                                                                                                    
PSIsContainer             NoteProperty   bool PSIsContainer=False                                                                                                 
PSParentPath              NoteProperty   string PSParentPath=Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32                                            
PSPath                    NoteProperty   string PSPath=Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32\notepad.exe                                      
..                                                                                     
Directory                 Property       System.IO.DirectoryInfo Directory {get;}                                                                                 
DirectoryName             Property       string DirectoryName {get;}                                                                                              
...                                                                                               
FullName                  Property       string FullName {get;}                                                                                                   
...

这当然会让你来到这里:

(Get-Item((gcm notepad.exe).Path)).Directory
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       12/19/2018   1:33 PM                system32

(Get-Item((gcm notepad.exe).Path)).DirectoryName
C:\Windows\system32

(Get-Item((gcm notepad.exe).Path)).FullName
C:\Windows\system32\notepad.exe

因此 ...

ii (gi((gcm notepad.exe).Path)).FullName 

值得注意的是,这一切都很酷,都是用于交互式的东西,但在生产脚本中的最佳实践,应该真正避免使用别名和简称,因为它使脚本难以理解和维护。

相关内容