我如何问PowerShell的东西在哪里?

例如,"which notepad",它根据当前路径返回notepad.exe运行的目录。


当前回答

如果你想要一个既接受管道输入又接受参数输入的命令,你应该试试这个:

function which($name) {
    if ($name) { $input = $name }
    Get-Command $input | Select-Object -ExpandProperty Path
}

复制粘贴命令到您的概要文件(记事本$profile)。

例子:

❯ echo clang.exe | which
C:\Program Files\LLVM\bin\clang.exe

❯ which clang.exe
C:\Program Files\LLVM\bin\clang.exe

其他回答

还有使用which的选项。实际上有三种方法可以从Windows powershell中访问

第一个(虽然不是最好的)是wsl(linux的windows子系统)

wsl -e which command 

这需要安装Linux的windows子系统和一个正在运行的发行版。

下一个是gnuwin32,它是几个。exe格式的gnu二进制文件的移植,作为独立的捆绑启动程序 第三,安装msys2(跨编译器平台),如果你去/usr/bin中安装它,你会发现很多很多最新的gnu utils。他们中的大多数工作作为独立的exe,可以从bin文件夹复制到你的家庭驱动器的某个地方,并添加到你的路径。

如果你想要一个既接受管道输入又接受参数输入的命令,你应该试试这个:

function which($name) {
    if ($name) { $input = $name }
    Get-Command $input | Select-Object -ExpandProperty Path
}

复制粘贴命令到您的概要文件(记事本$profile)。

例子:

❯ echo clang.exe | which
C:\Program Files\LLVM\bin\clang.exe

❯ which clang.exe
C:\Program Files\LLVM\bin\clang.exe

这是一个实际的*nix等效,即它给出*nix风格的输出。

Get-Command <your command> | Select-Object -ExpandProperty Definition

用你想要的替换就行了。

PS C:\> Get-Command notepad.exe | Select-Object -ExpandProperty Definition
C:\Windows\system32\notepad.exe

当你把它添加到你的配置文件时,你会想要使用一个函数而不是一个别名,因为你不能对管道使用别名:

function which($name)
{
    Get-Command $name | Select-Object -ExpandProperty Definition
}

现在,当你重新加载你的个人资料,你可以这样做:

PS C:\> which notepad
C:\Windows\system32\notepad.exe

试试这个例子:

(Get-Command notepad.exe).Path

在Windows 2003或更高版本(或Windows 2000/XP,如果您已经安装了Resource Kit)上尝试使用where命令。

顺便说一下,这个问题在其他问题中得到了更多的答案:

Windows上有对应的“which”吗?

PowerShell相当于Unix的哪个命令?