Обработка аргументов пакетного файла

Скажем, у меня есть пакетный файл с именем check.bat. Я запускаю его на java с помощью команды

Runtime.getRuntime().exec("cmd /c start C:\\check.bat");

Он запускает пакетный файл без проблем. Но когда я передаю аргументы в пакетный файл, например,

Runtime.getRuntime().exec("cmd /c start C:\check.bat arg1 arg2 arg3 arg4");

я хочу получить доступ к этим аргументам внутри check.bat. Я знаю, что %* получает все аргументы. Но я хочу, чтобы все аргументы, кроме последнего аргумента, были одной переменной. Очень новое для пакетных файлов. Пожалуйста помоги.


person Sudhakar Samak    schedule 31.03.2015    source источник


Ответы (2)


Первый метод, предложенный SomethingDark (объединение параметров перед вызовом командного файла), вероятно, является лучшим, но если вы не можете его использовать, может помочь следующее (возможно, вам придется поэкспериментировать, если ваши параметры содержат символы, которые имеют особое значение для Windows):

@echo off
        setlocal
        set ALLBUT1=
        if "%~2" == "" goto :gotthem
        set ALLBUT1=%1
:loop
        shift
        if "%~2" == "" goto :gotthem
        set "ALLBUT1=%ALLBUT1% %1"
        goto :loop
:gotthem
        set "LAST=%1"

        echo All-but-one:%ALLBUT1%:
        echo Last:%LAST%:

который дает:

S:\>arg one two three
All-but-one:one two:
Last:three:

S:\>arg one two three four
All-but-one:one two three:
Last:four:
person TripeHound    schedule 31.03.2015
comment
Большое спасибо. Работает отлично :) - person Sudhakar Samak; 01.04.2015

Обычно вы можете взять первые три аргумента как один гигантский аргумент, заключив их в кавычки, например check.bat "arg1 arg2 arg3" arg4.

Поскольку это на Java, вы должны иметь возможность экранировать некоторые кавычки в команде exec, например Runtime.getRuntime().exec("cmd /c start C:\check.bat \"arg1 arg2 arg3\" arg4");

И если по какой-то причине это не сработает, вы всегда можете просто взять четыре аргумента в пакетном режиме и делать с ними все, что хотите, внутри пакетного сценария.

@echo off
set first_three="%1 %2 %3"
set last_one=%4
person SomethingDark    schedule 31.03.2015