老伙计 发表于 2018-8-10 17:32

Linux 系统 which 命令的脚本实现

本帖最后由 老伙计 于 2018-8-10 18:35 编辑

         第一次发帖,献丑了。
         最近突然对 Windows 下的脚本编程很感兴趣, 于是,就动手编了一个作用类似于 Linux 系统 which 命令的程序, 文件名字叫 which.cmd,内容很简单,只有区区的几十行代码,功能是按照当前目录和 PATH 环境变量的顺序,定位一条命令可能对应的磁盘文件。当我们不知道一个命令具体的磁盘文件路径的时候,就可以用这个脚本搞定。
         例如,如果你想知道 notepad 命令的路径可以键入如下命令:

         which notepad

      就会得到答案。

      C:\Windows\system32\notepad.exe
      C:\Windows\notepad.exe

      一共找到了 2 个相关文件

@Echo off
setlocal enabledelayedexpansion

Set /a v=0

Echo.

If {%1}=={} (
    Echo.      Usage %0 ^<Command^>   
    Goto End
)

For /F %%a In ('CD') Do Set CWD=%%a
Set X="!CWD!\%1.*"
For %%a in (!X!) Do (
    Echo.      %%a
    Set /a v=!v!+1
)
For /F "tokens=1,* delims==" %%a in ('PATH') Do Set P=%%b
:Loop
If {!P!}=={} Goto Quit
For /F "tokens=1,* delims=;" %%a In ("!P!") Do (
    Set X=%%a
    Set P=%%b
    If !X:~-1!==\ Set X=!X:~0,-1!
    Set X="!X!\%1.*"
    For %%i in (!X!) Do (
      Echo.      %%i
      Set /a v=!v!+1
    )
)
Goto Loop
:Quit
If Not !v! equ 0 Echo.
Echo.      一共找到了 !v! 个相关文件

:End
Echo.
Echo.


      把这些代码复制,保存为 which.cmd 然后在这个文件路径下起一个 cmd 窗口,就可以使用了。
      如果一个命令用此脚本找不到对应的磁盘文件,那就可以断定,这条命令一定是操作系统的内部命令。

cyhcuichao 发表于 2018-8-10 18:21

我没看懂

老伙计 发表于 2018-8-10 18:25

cyhcuichao 发表于 2018-8-10 18:21
我没看懂

      什么内容没看懂,是脚本还是用法?
页: [1]
查看完整版本: Linux 系统 which 命令的脚本实现