Dưới đây là những gì tôi thường sử dụng. Nếu hôm nay tôi làm lại, tôi có thể làm điều đó một chút khác biệt, nhưng nó hoạt động tốt đến mức tôi chưa thực sự có lý do gì để xem nó trong nhiều năm (thực tế, tôi chắc chắn là lần cuối cùng tôi đã làm bất cứ điều gì để nó được thêm vào "cmd" vào danh sách các phần mở rộng khi tôi chuyển nó từ DOS để Win32 ...
// 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;
}
Nguồn
2010-08-11 00:45:40
Quá dài để lặp lại? Tạo một kịch bản/chương trình nhỏ lặp lại nó cho bạn. Chỉ cần tách biệt bằng ";" Không cần phải đào sâu vào các thư mục con. – OscarRyz
Lưu ý: 'JAVA_HOME' sẽ trỏ đến JDK. Chạy các chương trình Java không phải mỗi yêu cầu JDK, chỉ cần một JRE cũng đủ. Đại đa số người cuối cùng chỉ có một JRE. – BalusC
@OscarRyz: đó là doable, tôi chỉ tò mò cho dù có một cách trực tiếp nói cho vị trí của java bằng cách thực hiện một lệnh đơn giản từ cmd :) –