Windows %~$PATH:1扩展问题

Windows %~$PATH:1扩展问题,windows,batch-file,Windows,Batch File,因此,我最近偶然发现了(可能)有用的%~$PATH:1扩展,但我似乎无法使其正常工作。我试图用它来制作一个便宜的Windows版本的which命令,但语法似乎让我吃了亏。我的批处理文件如下所示: @echo off echo %~$PATH:1 @echo off call :checkpath %1 call :checkpath %1.exe call :checkpath %1.cmd call :checkpath %1.bat :checkpath if "%~$PATH:1" NE

因此,我最近偶然发现了(可能)有用的%~$PATH:1扩展,但我似乎无法使其正常工作。我试图用它来制作一个便宜的Windows版本的which命令,但语法似乎让我吃了亏。我的批处理文件如下所示:

@echo off
echo %~$PATH:1
@echo off
call :checkpath %1
call :checkpath %1.exe
call :checkpath %1.cmd
call :checkpath %1.bat
:checkpath
if "%~$PATH:1" NEQ "" echo %~$PATH:1
但是,当我使用例如

which cmd

所有我得到的都是“ECHO is off.”的输出,这意味着根据文档,%~$PATH:1没有找到“cmd”。我做错了什么?

开枪!我刚想出来!我需要使用完整的“cmd.exe”作为参数,而不仅仅是“cmd”。哦!;]因此,完整的which.cmd脚本如下所示:

@echo off
echo %~$PATH:1
@echo off
call :checkpath %1
call :checkpath %1.exe
call :checkpath %1.cmd
call :checkpath %1.bat
:checkpath
if "%~$PATH:1" NEQ "" echo %~$PATH:1

是啊!最后是Windows上的哪个命令!;]

开枪!我刚想出来!我需要使用完整的“cmd.exe”作为参数,而不仅仅是“cmd”。哦!;]因此,完整的which.cmd脚本如下所示:

@echo off
echo %~$PATH:1
@echo off
call :checkpath %1
call :checkpath %1.exe
call :checkpath %1.cmd
call :checkpath %1.bat
:checkpath
if "%~$PATH:1" NEQ "" echo %~$PATH:1

是啊!最后是Windows上的哪个命令!;]

检查扩展名为.exe、.cmd或.bat的文件是不够的。环境变量PATHEXT中定义了一组适用的扩展名

以下是我的which命令版本,该命令在搜索时接受PATHEXT变量:

@echo off
rem Windows equivalent of Unix which command

setlocal enabledelayedexpansion

if "%~1"=="" (
    echo Usage: which cmdname
    exit /b 1
)

call :findOnPath "%~1"
if not errorlevel 1 exit /b 0
for %%E in (%PATHEXT:;= %) do (
    call :findOnPath "%~1%%E"
    if not errorlevel 1 exit /b 0
)

echo "%~1" not found on PATH.
exit /b 1

:findOnPath
    if not "%~$PATH:1" == "" (
        echo "%~$PATH:1"
        exit /b 0
    )
    exit /b 1

检查扩展名为.exe、.cmd或.bat的文件是不够的。环境变量PATHEXT中定义了一组适用的扩展名

以下是我的which命令版本,该命令在搜索时接受PATHEXT变量:

@echo off
rem Windows equivalent of Unix which command

setlocal enabledelayedexpansion

if "%~1"=="" (
    echo Usage: which cmdname
    exit /b 1
)

call :findOnPath "%~1"
if not errorlevel 1 exit /b 0
for %%E in (%PATHEXT:;= %) do (
    call :findOnPath "%~1%%E"
    if not errorlevel 1 exit /b 0
)

echo "%~1" not found on PATH.
exit /b 1

:findOnPath
    if not "%~$PATH:1" == "" (
        echo "%~$PATH:1"
        exit /b 0
    )
    exit /b 1
我已经使用了一段时间,它还检查内置命令

我已经使用了一段时间,它还检查内置命令