Разобрать несколько аргументов внутри командного файла. - PullRequest
0 голосов
/ 29 марта 2012

Я хотел бы прочитать два параметра, которые передаются в командный файл.Пакетный файл будет выполнен из программы на C ++ с использованием метода CreateProcess.Второй параметр в пакетном файле - это путь к папке, поэтому из программы, если я передаю второй параметр, такой как «E: \ test folder \ test2», пакетный файл не выполняется.

Но если я вместо этого передам E: \ test folder \ test2, пакетный файл будет выполнен, но очевидно, что второй параметр имеет значение E: \ test only .. Так что я хотел бы прочитать первуюпараметр с использованием% 1 и получить остальное содержимое в другую переменную.

Может кто-нибудь сказать мне, как я могу этого достичь?Я пытался с% *, но он дает мне первый и второй параметры.Я хотел бы удалить первый токен с пробелом в качестве разделителя, чтобы у меня было остальное содержимое в переменной.Есть ли способ сделать это ?

Например, если я передам test.bat testparameter1 E: \ test folder \ test folder2 \ test folder3

Я хотел бы прочитать значение E: \ test folder \ test folder2 \ test folder3в переменную.

Если я передам test.bat testparameter1 E: \ test \ test folderX \ test folderY, то значение, которое я хочу прочитать в переменной внутри пакетного файла, равно E: \ test \ test folderX \ test folderY

Может кто-нибудь помочь мне с этим?Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Не могли бы вы изменить пробелы в пути на другой символ в вашем коде C ++? Например, если мы поменяем пробелы на arroba, вы можете передать это:

test.bat testparameter1 E:\test@folder\test@folder2\test@folder3

и в командном файле сделайте обратное изменение следующим образом:

set param2=%2
set param2=%param2:@= %

Другой возможный метод - собрать все параметры из второго параметра в одну переменную, разделив каждый из них на один пробел:

set param1=%1
shift
set param2=
:nextParam
set param2=%param2% %1
shift
if not "%1" == "" goto nextParam
0 голосов
/ 29 марта 2012

Если ваш пакетный файл вызывается с помощью

test.bat testparam1 "E:\test\folder2\test folder 3"

Вы можете прочитать параметры, используя %1 и %2

rem Contents of test.bat
@echo %0
@echo %1
@echo %2

Выше указано:

C:\Temp>test testparam1 "E:\test\folder2\test folder 3"
test.bat
testparam1
"E:\test\folder2\test folder 3"

C:\Temp>

Итак, у вас уже есть параметры в качестве переменных;они называются %1 для первого, %2 для второго и т. д.

Если проблема в том, что вы пытаетесь что-то сделать, используя «E: \ test \ folder2»\ test folder 3 "path, просто убедитесь, что добавляете обратную косую черту перед передачей:

"E:\test\folder2\test folder 3\"
...