解析批处理文件中的多个参数。

时间:2012-03-29 17:55:48

标签: command-line batch-file arguments space delimiter

我想读取传递给批处理文件的两个参数。批处理文件将使用CreateProcess方法从C ++程序执行。批处理文件的第二个参数是文件夹路径,因此如果我传递第二个参数(如“E:\ test folder \ test2”),程序中的批处理文件将不会执行。

但是如果我改为通过E:\ test folder \ test2批处理文件被执行但显然第二个参数的值只有E:\ test ..所以我想做的是使用%读取第一个参数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,想要读入批处理文件中的变量的valueIi是E:\ test \ test folderX \ test folderY

有人可以帮我吗?提前致谢。

2 个答案:

答案 0 :(得分:2)

你能用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

答案 1 :(得分:0)

如果使用

调用批处理文件
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”路径执行某些操作,请确保在传递之前添加尾部反斜杠:

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