【问题标题】:Concatenate a list of paths to a variable - to pass to "java -classpath ..." in CMD batch script将路径列表连接到变量 - 在 CMD 批处理脚本中传递给“java -classpath ...”
【发布时间】:2023-04-11 00:14:01
【问题描述】:

我正在尝试将启动 Java 程序的 a simple shell script 移植到 Windows 的 CMD 批处理脚本:

@echo on

set REPO="C:\Users\user1\.m2\repository"
set VERSION=9.3.9.v20160517

"C:\Program Files\Java\jdk1.8.0_66\bin\java.exe" -classpath C:\Users\user1\slova\WebSockets\target\classes;%REPO%\javax\servlet\javax.servlet-api\3.1.0\javax.servlet-api-3.1.0.jar;%REPO%\org\eclipse\jetty\websocket\websocket-server\%VERSION%\websocket-server-%VERSION%.jar;%REPO%\org\eclipse\jetty\websocket\websocket-common\%VERSION%\websocket-common-%VERSION%.jar;%REPO%\org\eclipse\jetty\jetty-io\%VERSION%\jetty-io-%VERSION%.jar;%REPO%\org\eclipse\jetty\websocket\websocket-client\%VERSION%\websocket-client-%VERSION%.jar;%REPO%\org\eclipse\jetty\jetty-servlet\%VERSION%\jetty-servlet-%VERSION%.jar;%REPO%\org\eclipse\jetty\jetty-security\%VERSION%\jetty-security-%VERSION%.jar;%REPO%\org\eclipse\jetty\jetty-server\%VERSION%\jetty-server-%VERSION%.jar;%REPO%\org\eclipse\jetty\jetty-http\%VERSION%\jetty-http-%VERSION%.jar;%REPO%\org\eclipse\jetty\websocket\websocket-servlet\%VERSION%\websocket-servlet-%VERSION%.jar;%REPO%\org\eclipse\jetty\websocket\websocket-api\%VERSION%\websocket-api-%VERSION%.jar;%REPO%\org\eclipse\jetty\jetty-util-ajax\%VERSION%\jetty-util-ajax-%VERSION%.jar;%REPO%\org\eclipse\jetty\jetty-util\%VERSION%\jetty-util-%VERSION%.jar;%REPO%\org\postgresql\postgresql\9.4.1208.jre7\postgresql-9.4.1208.jre7.jar de.afarber.websockets.MyHandler

如您所见(如果您将上面的代码滚动到右侧),java -classpath 字符串后面有一个较长的文件路径列表。

是否可以在单独的行上列出每个路径 - 然后通过 CMD shell 将该列表连接到变量(在中间添加分号 ;)?

这样我可以更好地维护我的批处理文件(更容易在编辑器中编辑),最后只需调用java -classpath %CPATHS% de.afarber.websockets.MyHandler

更新:

如果所有 JAR 文件都位于同一个目录中,我可以使用 the new Java 8 wildcard syntax java -classpath "\that\dir\*" de.afarber.websockets.MyHandler - 但这里不是这种情况。

【问题讨论】:

    标签: java windows batch-file cmd windows-7


    【解决方案1】:

    您可以以这种形式使用变量:

    set MYCLASSPATH=C:\Users\user1\slova\WebSockets\target\classes
    set MYCLASSPATH=%MYCLASSPATH%;%REPO%\javax\servlet\javax.servlet-api\3.1.0\javax.servlet-api-3.1.0.jar
    ...
    
    "C:\Program Files\Java\jdk1.8.0_66\bin\java.exe" -classpath %MYCLASSPATH% ...
    

    【讨论】:

    • 谢谢,这样就可以了!但是CMD中没有一些数组变量吗?或者可能是一个包含多行的变量(例如 Unix shell 和 PHP/Perl 脚本中的 HERE 赋值)?提高可读性
    • @AlexanderFarber 看这里:stackoverflow.com/questions/17605767/…
    • 将路径附加到同一个变量MYCLASSPATH 的技巧实际上非常简单和好,我也可以在我的 Unix shell 脚本中使用它:-)
    • @JosefZ 谢谢。已经改了
    • set "MYCLASSPATH=C:\Users\user1\slova\WebSockets\target\classes;" 包含结尾的 ; 分号。然后在set MYCLASSPATH=%MYCLASSPATH%;%REPO%\… 之后,MYCLASSPATH 变量将包含 doubled ;; 分号。 (不知道为什么我之前的评论消失了?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多