gpt4 book ai didi

java - 连续两次发出启动 cmd.exe 的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:31 26 4
gpt4 key购买 nike

为了避免重复操作,我正在尝试自动化一些在古代建立的流程。要求进程以一批开始并以另一批停止(顺便说一句,这不能更改)。

所以我制作了一个命令行工具来执行此操作(以及许多其他重复性操作),并且我已经建模了一个启动“startbatch”的命令和一个启动“stopbatch”的命令。这两个命令单独运行良好(因为我单独测试了它们)但是当我想一个接一个地执行它们时(当然以正确的顺序)似乎有问题。我在新的 cmd.exe 窗口中收到以下错误:

该进程无法访问该文件,因为它正被另一个进程使用。

我用来启动批处理的代码如下所示:

public void startBatchInDev(String company){
String startBatchFolder = locations.getLocationFor("startbatch");

try{
Runtime runtime = Runtime.getRuntime();
runtime.exec("cmd.exe /C cd \"" + startBatchFolder + "\" & start cmd.exe /k \"" + BATCHSTART + company.toLowerCase()+ "-dev" + BATCH_SUFFIX + "\"");
}
catch(IOException ioe){
ioe.printStackTrace();
}
}

public void stopBatchInDev(String company){
String startBatchFolder = locations.getLocationFor("startbatch");

try{
Runtime runtime = Runtime.getRuntime();
runtime.exec("cmd.exe /C cd \"" + startBatchFolder + "\" & start cmd.exe /k \"" + BATCHSTOP + company.toLowerCase()+ "-dev" + BATCH_SUFFIX + "\"");
}
catch(IOException ioe){
ioe.printStackTrace();
}
}

批处理文件的名称是串联的,但是一旦应用程序运行它们就可以了。

错误信息很清楚,一些文件被锁定了,因此我无法访问它。一些谷歌搜索证实了我的怀疑,但我似乎无法找到解决方案。谷歌中的点击都是关于文件的明显用途,比如明显的共享资源。但就我而言,我不是在处理同一个批处理文件。停止和启动批处理是两个不同的文件。所以我实际上开始认为它可能是被windows锁定的cmd.exe文件......

所以这个问题其实是两个问题:- 所描述问题的确切原因是什么?- 如何以编程方式解决此问题(如果可能)?

提前致谢!

最佳答案

所以,基本上,bat 并不是那么好:-(我能够从 java 中重现这个,但我也发现这个脚本:

@echo off
echo STOP
echo STOP >> E:\tmp\java\logfile.txt
C:\cygwin\bin\sleep.exe 1
echo STOP1 >> E:\tmp\java\logfile.txt
C:\cygwin\bin\sleep.exe 1
echo STOP2 >> E:\tmp\java\logfile.txt

像这样运行两次时:

start test.bat && start test.bat

将失败并显示一条或多条消息,例如:

The process cannot access the file because it is being used by another process.

原因是“>>”重定向打开文件进行读/写访问,但只有 FILE_SHARE_READ 共享。如果两个不同的程序试图以这种方式打开文件,其中一个会失败。

因此,您不能同时运行两个不同的批处理文件并记录到同一个文件

关于java - 连续两次发出启动 cmd.exe 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17528105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com