Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Command line 分析批处理文件中的多个参数。_Command Line_Batch File_Arguments_Space_Delimiter - Fatal编程技术网

Command line 分析批处理文件中的多个参数。

Command line 分析批处理文件中的多个参数。,command-line,batch-file,arguments,space,delimiter,Command Line,Batch File,Arguments,Space,Delimiter,我想读取传递给批处理文件的两个参数。批处理文件将使用CuraTealPosid方法从C++程序执行。批处理文件的第二个参数是文件夹路径,因此从程序中,如果我传递第二个参数,如“E:\test folder\test2”,批处理文件不会执行 但是如果我改为传递E:\test folder\test2,批处理文件将被执行,但显然第二个参数的值仅为E:\test。。因此,我要做的是使用%1读取第一个参数,并将其余内容放入另一个变量中 有人能告诉我如何做到这一点吗?我尝试使用%*但它同时提供了第一个和第

我想读取传递给批处理文件的两个参数。批处理文件将使用CuraTealPosid方法从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,那么我要读入批处理文件内变量的值是E:\test\test folderX\test folderY


有人能帮我吗?提前谢谢

如果使用调用批处理文件

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\"

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

谢谢肯,问题是如果我直接从命令行传递参数,就像你提到的双引号一样,但是当我尝试使用CuraPieldToad方法从C++代码中运行批处理文件时,如果由于某种原因,如果我通过DouLee引用传递参数,批处理文件就不会被执行。这非常令人费解,我不知道为什么会发生这种情况。请编辑上面的问题,提供您正在使用的
CreateProcess
代码。由于批处理文件工作正常,问题在于将命令行传递到
CreateProcess
的方式。能否显示完整的CreateProcess语句?我怀疑你第二个论点的引语需要转义。