如何在cmd.exe中“哪个<binary>”


Answers:


14

cmd.exe单行代码为which

for %G in (<binary.exe>) do @echo.%~$PATH:G

您可以将其编码为简单的which.bat:

@echo off
for %%G in (%1) do @echo.%%~$PATH:G

编辑:它需要binary:的全名which perl.exe,而不是which perl。可以编写考虑%PATHEXT%的批处理文件,因此不需要二进制的全名。如果需要的话,请告诉我。

EDIT2:无论如何,我决定编写批处理文件。这里是:

@echo off
setlocal enabledelayedexpansion

set ext= ;%PATHEXT%
:extloop1
for /f "delims=; tokens=1,*" %%A in ("!ext!") do (
  if exist %1%%A (
    echo .\%1%%A
    goto finish
  )
  set ext=%%B
)
if "!ext!" neq "" goto extloop1

set ext= ;%PATHEXT%
:extloop2
for /f "delims=; tokens=1,*" %%A in ("!ext!") do (
  for %%C in (%1%%A) do (
    if exist %%~$PATH:C (
      echo %%~$PATH:C
      goto finish
    )
  )
  set ext=%%B
)
if "!ext!" neq "" goto extloop2

:finish
endlocal

首先,按照Bob的建议,它检查二进制文件是否存在于当前目录中。如果找不到二进制文件,则执行另一个循环,该循环通过%PATH%变量进行搜索。

循环基于if ... gotofor命令仅用于将ext值除以';' 字符。的值%PATHEXT%都-与空的扩展,它允许用于搜索完全名为二进制前缀which perlwhich perl.exe作品。


1
好吧,如果您最终编写了扩展的批处理文件,则不妨一路检查一下.\binary.*操作系统始终先在当前目录中搜索,然后再在命令路径中搜索目录。
Bob

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.