有没有办法可以快速确定二进制文件(变量%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 ... goto
,for
命令仅用于ext
通过“;”字符拆分值。 的值%PATHEXT%
前面有一个空扩展名,可用于搜索完整命名的二进制文件 -which perl
和都which perl.exe
有效。
答案2
您可以尝试 Paul Sadowski 的实用程序集合 - 其中有一个which
。请参阅:http://www.paulsadowski.com/wsh/cmdprogs.htm