如何从%PATH%而不是当前文件夹运行程序

如果在当前文件夹中有一个具有相同名称的程序时,在Windows中运行%PATH%中存在的程序,它将select当前文件夹中的程序。 有什么办法来防止这个(忽略当前文件夹)?

我的问题的原因是,我有一个Java程序,我放在registry中的运行键像这样:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] MyProgram = javaw -cp MyProgram.jar com.mycompany.MyProgram 

问题是在我testing的一台电脑上没有工作。 它抱怨错误的JRE版本(1.7而不是1.8)。 我发现在这台计算机上有人安装了JRE 1.8超过1.7,但1.7文件仍然保留在Windows \ System32中。

如果我在命令提示符下手动启动javaw -cp MyProgram.jar com.mycompany.MyProgram,它将起作用,除非我将Windows \ System32作为当前文件夹。

问题是当Windows在启动过程中(从registry中的Run-key)启动程序时,它将System32作为当前文件夹,因此它将使用错误的JRE版本。

我可以通过从System32中删除不正确的exe文件来解决这个特定的计算机上,但我希望它的工作时,别人安装在别的地方,我想到的最好的办法是强制Windows使用%PATH %,但我不知道如何。

 @echo off set "to_run=javaw.exe" for %%# in ("%to_run%") do set "ppath=%%~$PATH:#" echo %ppath% "%ppath%" -cp MyProgram.jar com.mycompany.MyProgram 

有关%~$PATH:更多信息%~$PATH:语法检查for /?

你可以通过从另一个java不太可能存在的目录开始避免这种情况,例如:

cmd /c (cd\ && start /b javaw -cp MyProgram.jar com.mycompany.MyProgram)

start /b是为了避免cmd窗口附近

如果在当前文件夹中有一个具有相同名称的程序时,在Windows中运行%PATH%中存在的程序,它将选择当前文件夹中的程序。 有什么办法来防止这个(忽略当前文件夹)?

不,这是大多数操作系统工作的机制:由于您明确从某个文件夹启动程序,因此您的程序将以该文件夹作为工作目录运行。

问题是在我测试的一台电脑上没有工作。 它抱怨错误的JRE版本(1.7而不是1.8)。 我发现在这台计算机上有人安装了JRE 1.8超过1.7,但1.7文件仍然保留在Windows \ System32中。

那么你的解决方案绝对不应该改变工作目录,而是明确地强制执行一个最小的Java版本,通过明确地调用正确的路径来设置正确的路径。

只需使用正确调用Java的cmd批处理文件即可。