【发布时间】:2021-02-06 10:06:18
【问题描述】:
我有一个使用 ProcessBuilder 执行动态批处理文件的 java 程序 (jar)。
Process process = (new ProcessBuilder(commands)).start();
我有一个像这样的简单批处理文件,Z --> 是一个网络驱动器。假设我的批处理文件位置在 my_batch.bat 中。
copy Z:\Download\*.csv D:\Download\
如果我从命令提示符执行这个批处理文件,它会成功运行。但是,如果我使用 java 程序执行,则该程序不起作用(没有任何反应)。但是,如果我像下面这样更改批处理文件,它就可以工作。 E-> 是普通驱动器(不是网络驱动器)。
copy E:\Download\*.csv D:\Download\
我不知道为什么会发生这种情况,请帮忙。 我的操作系统是 Windows。
【问题讨论】:
-
网络驱动器映射仅针对特定用户进行。添加到您的批处理命令
whoami & pause双向运行并比较输出。 -
是的,你是对的,从 java 程序执行的批处理文件是“nt authority\system”,如果我手动运行批处理文件,whoami 的结果是“my_domain\administrator”,那么如何不是以“nt authority\system”而是以管理员身份运行我的程序,或者也授予对“nt authority\system”的访问权限?
-
嗨@user2956477,现在我可以将java程序更改为以用户管理员身份运行,因为我的java程序作为服务运行,现在whoami显示相同的用户“my_domain\administrator”但仍然我不能让它工作。
-
尝试将
net use添加到您的批处理中,并检查脚本是否将驱动器 Z: 视为映射。如果是,请添加dir z:并检查输出。如果工作正常,那么问题可能在其他地方。 -
来自java程序,显示Z盘,但状态不可用,如果我手动运行批处理,显示Z盘,状态正常。
标签: java spring-boot batch-file command-prompt