Unix的“哪些Java”等效命令在Windows上?

可能重复:
是否有相当于Windows上的“哪个”?

无法在Google上找到它,但只是想知道是否有方法通过Windows提示符下的等效命令来显示java的位置。

基本上我有来自客户端的信息,他没有设置JAVA_HOME,但仍然可以运行Java程序。 我怀疑它一定是因为这个java的路径被设置在系统PATH环境变量中,但是这太快而无法快速迭代,也是非常痛苦的(必须挖掘到子文件夹)。

预先感谢您的任何建议!


你可以试试:

c:> for %i in (java.exe) do @echo.   %~$PATH:i
   C:WINDOWSsystem32java.exe

这是Windows for命令的一个功能,您可以使用for /? 获取详细信息:

In addition, substitution of FOR variable references has been enhanced.
You can now use the following optional syntax:
    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    %~$PATH:I   - searches the directories listed in the PATH
                   environment variable and expands %I to the
                   fully qualified name of the first one found.
                   If the environment variable name is not
                   defined or the file is not found by the
                   search, then this modifier expands to the
                   empty string

The modifiers can be combined to get compound results:
    %~dpI       - expands %I to a drive letter and path only
    %~nxI       - expands %I to a file name and extension only
    %~fsI       - expands %I to a full path name with short names only
    %~dp$PATH:I - searches the directories listed in the PATH
                   environment variable for %I and expands to the
                   drive letter and path of the first one found.
    %~ftzaI     - expands %I to a DIR like output line

In the above examples %I and PATH can be replaced by other valid
values.  The %~ syntax is terminated by a valid FOR variable name.
Picking upper case variable names like %I makes it more readable and
avoids confusion with the modifiers, which are not case sensitive.

我在这里错过了什么吗? 尝试以下简单的命令行怎么样?

c:> dir / s java.exe

要么

c:> dir / s javaw.exe

他们需要时间,但他们会工作。 如果你想让它更快,请从“c: Program files”开始


这是我通常使用的。 如果我今天再做一次,我可能会做得有点不同,但它运行得很好,我没有任何理由多年来看它(事实上,我很确定上次我做了任何事情,当我将它从DOS移植到Win32时,将“cmd”添加到扩展名列表中...

// Which.c:
#include <io.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *extensions[] = { "com", "exe", "bat", "cmd", NULL };

int is_exe(char *ext) {

    int i;

    for ( i = 0; extensions[i]; i++)
        if ( 0 == stricmp(ext, extensions[i] ) )
            return 1;
    return 0;
}

int main(int argc, char **argv) {

    char path[FILENAME_MAX];
    char buffer[FILENAME_MAX];
    char *path_var;
    char *ext;
    char *dir;
    int i;

    if (argc != 2) { 
        fprintf(stderr, "Usage: which <filename>n");
        return 1;
    }

/* First try to find file name as-is.
 */
    if ( 0 == access(argv[1], 0)) {
        printf("n%s", argv[1]);
        return 0;
    }

/* Okay, it wasn't found.  See if it had an extension, and if not, try
 * adding the usual ones...
 */

    ext = strrchr(argv[1], '.' );

    if ( 0 == ext++ || !is_exe(ext) ) {
        for ( i = 0; extensions[i]; i++) {

            sprintf(buffer, "%s.%s", argv[1], extensions[i]);

            if ( 0 == access(buffer, 0)) {
                printf("n%s", buffer);
                return 0;
            }
        }

        if ( NULL == (path_var=getenv("PATH")))
            return 1;

        dir = strtok(path_var, ";");
        do {
            for ( i = 0; extensions[i]; i++) {

                sprintf(buffer, "%s%s.%s", dir, argv[1], extensions[i]);

                if ( 0 == access( buffer, 0)) {
                    printf("n%s", buffer);
                    return 0;
                }
            }
        } while ( NULL != ( dir = strtok(NULL, ";")));
    }

    else {
        if ( NULL == (path_var=getenv("PATH")))
            return 1;

        dir = strtok(path_var, ";");
        do {
            sprintf(buffer, "%s%s", dir, argv[1]);

            if ( 0 == access( buffer, 0)) {
                printf("n%s", buffer);
                return 0;
            }
        } while ( NULL != ( dir = strtok(NULL, ";")));
    }
    return 1;
}
链接地址: http://www.djcxy.com/p/30253.html

上一篇: unix "which java" equivalent command on windows?

下一篇: Command to run PowerShell command from Windows CMD