Передача строки в Java в командный файл для некоторых других целей

1

В настоящее время я нахожу способы передать строку в 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)
    ...

Это моя ошибка. Я пытаюсь отлаживать сейчас.

Теги:
batch-file
cmd
command

2 ответа

0
Лучший ответ
String[] command = 
new String[]{"cmd", "/c", "start", "/wait",
             DetectDrive+"\\imageinfo.bat", fileToPath};

Ответил бесстыдно ответ с другого сайта.

0

AFAIK вам просто нужно вызвать exec(String[]) с массивом, являющимся командой и ее параметрами.

Таким образом, ваш вызов может выглядеть так:

Process p = Runtime.getRuntime().exec(new String[]{ command, pathToFile });

Обратите внимание, что вам может потребоваться обернуть путь в двойные кавычки для Windows, чтобы правильно обрабатывать пути, содержащие пробелы или другие специальные символы.

Обновление:

echo %filePath% будет работать, только если у вас есть переменная в пакетном файле, которая называется filePath. Обратите внимание, что вы не можете получить доступ к переменным Java из пакетных файлов.

Если вы передадите параметр пакетному файлу, он скорее всего сделает их доступными через их индекс, например, echo %1 будет печатать значение первого параметра (который должен быть путь к файлу в вашем случае).

  • 0
    @ Стивен почти, я имел в виду что-то вроде "\"" + chooser.getSelectedFile().getAbsolutePath() + "\"" для передачи пути к процессу.
  • 0
    хм ... хотелось бы я понял. Когда я пытался, но у него есть ошибки. Для чего же "\"? Таким образом, chooser.getSelectedFile().getAbsolutePath() сохраняет chooser.getSelectedFile().getAbsolutePath() например, F: \ Document.doc, а затем я могу просто set /P p=chooser.getSelectedFile().getAbsolutePath() в моем пакетном файле ???
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню