В настоящее время я нахожу способы передать строку в java в пакетный файл, на котором будут выполняться несколько команд.
Например..
JFileChooser chooser = new JFileChooser();
JButton btnSelect = new JButton("SELECT");
btnSelect.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent args)
{
//chooser.setMultiSelectionEnabled(true); //enable multiple selection of files
int i = chooser.showOpenDialog(null);
if (i == chooser.APPROVE_OPTION)
{
textField.setText(chooser.getSelectedFile().getAbsolutePath());
}
//works. able to output file path.
//System.out.println(chooser.getSelectedFile().getAbsolutePath());
}
});
//when start button is selected
btnStart.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent args)
{
// image info code
try
{
//System.out.println(chooser.getSelectedFile().getAbsolutePath());
//create new process
String command = "cmd /c start /wait "+DetectDrive+"\\imageinfo.bat";
Process p = Runtime.getRuntime().exec(command);
//cause this process to stop until process p is terminated
p.waitFor();
}
catch (IOException | InterruptedException e1)
{
e1.printStackTrace();
}
}
}
Так что это часть моего java-кодирования. Но я хочу, чтобы, когда пользователь использует параметр "select" для выбора файла, этот путь к файлу - System.out.println(chooser.getSelectedFile().getAbsolutePath());
,
Как передать этот параметр в пакетный файл для других целей? Потому что для моего командного файла потребуется путь к файлу, выбранный пользователем.
Я слышал, что есть способ, но я не знаю, как.. Я пытался исследовать, но, похоже, не работал. Любая помощь будет оценена!!!
РЕДАКТИРОВАНИЕ
Я написал это в своем java-кодировании:
String filePath = chooser.getSelectedFile().getAbsolutePath();
//create new process
String command = "cmd /c start /wait "+DetectDrive+"\\BatchFiles\\imageinfo.bat";
Process p = Runtime.getRuntime().exec(new String[]{command,"\""+filePath+"\""});
p.waitFor();
Когда пользователь выбирает файл (например, E:\jooo.txt), filePath
может хранить этот путь к файлу. Но когда я запускаю его, что-то не так с Process p =...
И я не знаю, что написать в мой пакетный файл, чтобы путь к файлу, выбранный пользователем, будет показан в пакетном файле.
Например (в моем командном файле):
echo %filePath%
Кажется, что это не работает. Как мне закодировать в пакетном файле, чтобы он показывал путь к файлу, который пользователь выбрал в java?
Я новичок в этой области, поэтому мне нужна дополнительная помощь здесь. Любая помощь будет оценена!
EDITED2
java.io.IOException: Cannot run program "cmd /c start /wait E:\\imageinfo.bat": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at Volatility$3.actionPerformed(Volatility.java:187)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
...
Это моя ошибка. Я пытаюсь отлаживать сейчас.
String[] command =
new String[]{"cmd", "/c", "start", "/wait",
DetectDrive+"\\imageinfo.bat", fileToPath};
Ответил бесстыдно ответ с другого сайта.
AFAIK вам просто нужно вызвать exec(String[])
с массивом, являющимся командой и ее параметрами.
Таким образом, ваш вызов может выглядеть так:
Process p = Runtime.getRuntime().exec(new String[]{ command, pathToFile });
Обратите внимание, что вам может потребоваться обернуть путь в двойные кавычки для Windows, чтобы правильно обрабатывать пути, содержащие пробелы или другие специальные символы.
Обновление:
echo %filePath%
будет работать, только если у вас есть переменная в пакетном файле, которая называется filePath
. Обратите внимание, что вы не можете получить доступ к переменным Java из пакетных файлов.
Если вы передадите параметр пакетному файлу, он скорее всего сделает их доступными через их индекс, например, echo %1
будет печатать значение первого параметра (который должен быть путь к файлу в вашем случае).
"\"" + chooser.getSelectedFile().getAbsolutePath() + "\""
для передачи пути к процессу.chooser.getSelectedFile().getAbsolutePath()
сохраняетchooser.getSelectedFile().getAbsolutePath()
например, F: \ Document.doc, а затем я могу простоset /P p=chooser.getSelectedFile().getAbsolutePath()
в моем пакетном файле ???