我怎样才能““在cmd.exe中

我怎样才能““在cmd.exe中

有没有办法可以快速确定二进制文件(变量%PATH%指向的)的位置。

which perl这与传统的 unix shell 所做的事情是一样的。

我明白那个资源套件有一个where命令,但是我的(公司)电脑上没有安装这个套件,所以我无法使用where

答案1

cmd.exe 的一行代码如下which

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

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

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

编辑:它需要二进制文件的全名: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 perl和都which perl.exe有效。

答案2

您可以尝试 Paul Sadowski 的实用程序集合 - 其中有一个which。请参阅:http://www.paulsadowski.com/wsh/cmdprogs.htm

相关内容