有没有一种方法可以快速确定二进制文件(%PATH%
变量指向的位置)的位置。
这which perl
与传统的unix shell中的功能相当。
我知道资源工具包有一个where
命令,但是该工具包未安装在(公司)计算机上,因此我无法使用where
。
有没有一种方法可以快速确定二进制文件(%PATH%
变量指向的位置)的位置。
这which perl
与传统的unix shell中的功能相当。
我知道资源工具包有一个where
命令,但是该工具包未安装在(公司)计算机上,因此我无法使用where
。
Answers:
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 ... goto
,for
命令仅用于将ext
值除以';' 字符。的值%PATHEXT%
都-与空的扩展,它允许用于搜索完全名为二进制前缀which perl
和which perl.exe
作品。
您可以尝试Paul Sadowski的实用程序集合-他包括一个which
。看到它在:http : //www.paulsadowski.com/wsh/cmdprogs.htm
.\binary.*
。操作系统始终先在当前目录中搜索,然后再在命令路径中搜索目录。