unix“哪个java”在windows上等效命令?

unix “which java” equivalent command on windows?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Is there an equivalent of ‘which’ on windows?

在谷歌上找不到它,只是想知道是否有一种方法可以从Windows提示符中用一个等效的命令来显示Java的位置。

基本上,我从客户那里得知他没有设置JavaJHOST,但仍然可以运行Java程序。我怀疑这是必须的,因为Java的路径是在系统路径环境变量中设置的,但是这太长,不能以快速的方式迭代,也非常痛苦(必须挖掘子文件夹)。

感谢您提前提出任何建议!


你可以试试:

1
2
c:\> for %i in (java.exe) do @echo.   %~$PATH:i
   C:\WINDOWS\system32\java.exe

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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:>目录java.exe

C:>dir/s javaw.exe文件

他们需要时间,但他们会工作的。如果您想加快速度,请从"C:Program Files"开始。


这是我通常使用的。如果我今天再做一次,我可能会做的有点不同,但它工作得很好,我真的有很多年没有任何理由去看它了(事实上,我很确定上次我做任何事情是在我把它从DOS移植到win32时把"cmd"添加到扩展列表中…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// 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>
"
);
        return 1;
    }

/* First try to find file name as-is.
 */

    if ( 0 == access(argv[1], 0)) {
        printf("
%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("
%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("
%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("
%s"
, buffer);
                return 0;
            }
        } while ( NULL != ( dir = strtok(NULL,";")));
    }
    return 1;
}

其他答案看起来不错。为了完整性起见,我将添加您还可以将JRE与应用程序一起分发。它不像其他解决方案那么优雅,但是它会起作用,而且你不必担心客户端拥有的Java版本。