从bat文件设置类路径不起作用[重复]

Posted

技术标签:

【中文标题】从bat文件设置类路径不起作用[重复]【英文标题】:Setting classpath from bat file doesnt work [duplicate] 【发布时间】:2019-06-22 08:55:09 【问题描述】:

因此,当我手动启动桌面上的 bat 文件时,它可以工作,因为通过其图标执行 bat 文件使用的是图标(文件)的目录,即“C:\Users\Michael\Desktop”。

set CLASSPATH = %~dp0 &:: %~dp0 stands for the directory of the bat file
java InitArray 5 0 4 &:: comment
pause

当我从其桌面图标运行上面的 bat 文件(InitArray.bat)时,它可以工作。

java InitArray 5 0 4 &:: comment
pause

当我从其桌面图标运行上面的 bat 文件(test.bat)时,它可以工作。

但是当我从任务调度程序运行 InitArray.bat 时,它使用目录“C:\WINDOWS\system32”。但这应该不是问题,因为 bat 文件所做的第一件事就是“设置 CLASSPATH = C:\Users\Michael\Desktop\”。

这是任务调度程序尝试运行 InitArray.bat 的结果。

C:\WINDOWS\system32>set CLASSPATH = C:\Users\Michael\Desktop\

C:\WINDOWS\system32>java InitArray 5 0 4
Error: Could not find or load main class InitArray

C:\WINDOWS\system32>pause
Press any key to continue . . .

现在,我知道我可以通过将“C:\Users\Desktop\”添加到环境变量 CLASSPATH 来解决这个问题。但我不应该这样做,因为我在尝试运行 java 类之前在我的 bat 文件的第一行中手动将类路径设置为桌面。

【问题讨论】:

您的代码中充满了非法内容,为什么会有人阅读它?删除所有格式错误的lable。他们以:: 开头,告诉我们你复制了这些东西。 set CLASSPATH = %~dp0 设置了一个名为CLASSPATH + SPACE 的变量,所以去掉=-sign 周围的空格...啊,去掉&::东西(通常很好,但会导致可怕的问题);对于 cmets,请使用 rem... @catcat 不,我没有复制这些东西。我不是dos编程方面的专家。我认为 &:: 只是一个无害的注释,就像 java 中的 // 一样。 或者,cd %~dp0。或java -cp "%~dp0" InitArray 5 0 4. 【参考方案1】:

设置变量时,从变量名的开头一直到最后输入的字符用作变量名的一部分,在= 之前和= 之后的值。所以:

set CLASSPATH = Somepath

将以变量名%CLASSPATH %(注意尾随空格)和值Somepath(注意起始空格)结束。

即使你在值后面加了一个意外的空格,它也会成为它的一部分,所以这个 set CLASSPATH=Somepath 最终将得到带有尾随空格 Somepath 的值

因此,在= 之前或之后始终不留空格,并始终将您的代码用双引号括起来以消除空格:

set "CLASSPATH=Somepath"

或者在您的实际情况下,它应该如下所示:

set "CLASSPATH=%~dp0"

【讨论】:

我想我可以使用 echo 和 pause 来调试我的 bat 程序(打印变量值)。无论如何,谢谢你的回答。【参考方案2】:

使用 java 执行命令设置 CLASSPATH 或使用 cd 命令更改目录。

cd /path_to_required_folder   // set current directory
java -cp /classpath_location/ test.jar your.package.MainClass [args...]

希望这会有所帮助。

【讨论】:

我不想使用 cd 命令,因为我希望 bat 文件是动态的(无论用户将包含 bat 文件和 java 类文件的文件夹移动到何处都运行)。

以上是关于从bat文件设置类路径不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C ++ ifstream长完整路径不起作用[重复]

java - trustStore 的路径 - 设置属性不起作用?

.bat 文件不起作用 |运行 .bat 文件时显示无效语法 | Python 3.4.0

“reg add”似乎在 .BAT 文件中有时不起作用

在 .bat 文件中使用 Python 导入 pandas 时不起作用

React JS路由路径不起作用[重复]