首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将逗号分隔的参数传递给批处理文件并在批处理文件中使用?

问如何将逗号分隔的参数传递给批处理文件并在批处理文件中使用?
EN

Stack Overflow用户
提问于 2015-11-27 10:50:21
回答 1查看 2.2K关注 0票数 0

我有一个批处理文件MyTest.bat

代码语言:javascript
复制
MyTest.bat

call "first.bat" 

call "second.bat" 

call "third.bat"

现在在执行MyTest.bat时,我将传递逗号分隔的参数,如

呼叫MyTest.bat first.bat,second.bat

现在,在MyTest.bat内部,我希望检查哪些参数被传递,并基于那些使用if else条件的参数。

我想执行内部声明。

例如,类似的东西

代码语言:javascript
复制
MyTest.bat first.bat,second.bat

now inside 

I will check 

get all parameters list param[] = {first.bat,second.bat}

if param[i] ==  "first.bat" 

{

call "first.bat" 

}

else if param[i] ==  "second.bat" 


{

call "second.bat" 

}

else if param[i] ==  "third.bat" 


{

call "third.bat" 

}

//这可以确保只执行这些语句传递的参数,而不执行其他语句。

上面的代码只是一个伪代码,如何才能写出实际的MyTest.bat呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-27 16:22:19

下一个脚本需要另一个参数顺序(从批处理名称到结束所有其他参数的列表):

代码语言:javascript
复制
@ECHO OFF
SETLOCAL EnableExtensions
rem usage: 33955749.bat name address "first script", second, third
:loop
  if "%~3" == "" goto :next
  if exist "%~n3.bat" (
    call "%~n3.bat" %1 %2
  ) else (
    echo can't found file; failed call "%~n3.bat" %1 %2 
  )
  shift /3
  goto :loop
:next

为了调试目的,准备示例文件"first script.bat"和second.bat;确保third.bat不存在:

代码语言:javascript
复制
==> >"first script.bat" echo @echo %~nx0 parameters: %%*=%*

==> >second.bat echo @echo %~nx0 parameters: %%*=%*

==> 2>NUL del third.bat

Output (显示了与使用的定界符的独立性):

代码语言:javascript
复制
==> 33955749 name address "first script", second, third
first script.bat parameters: %*=name address
second.bat parameters: %*=name address
can't found file; failed call "third.bat" name address

==> 33955749 name address "first script"  second; third
first script.bat parameters: %*=name address
second.bat parameters: %*=name address
can't found file; failed call "third.bat" name address

另一种方法: fist参数=逗号分隔的批名称列表,其周围环绕着一对双引号:

代码语言:javascript
复制
@ECHO OFF
SETLOCAL EnableExtensions
rem usage: 33955749b "first script,second,third" name address
rem no spaces surrounding commas or names
rem wrong: 33955749b " first script , second, third" would fail
set "_names=%~1"
set "_names=%_names:,=","%"
rem debug echo _names="%_names%"
for  %%G in ("%_names%") do (
  if exist "%%~dpnG.bat" (
    call "%%~dpnG.bat" %2 %3
  ) else (
    echo can't found script; failed call "%%~dpnG.bat" %2 %3 
  )
)

输出(显示对使用的分隔符的响应性):

代码语言:javascript
复制
==> 33955749b "first script,second,third" name address
first script.bat parameters: %*=name address
second.bat parameters: %*=name address
can't found script; failed call "D:\bat\SO\third.bat" name address

==> 33955749b "first script, second,third" name address
first script.bat parameters: %*=name address
can't found script; failed call "D:\bat\SO\ second.bat" name address
can't found script; failed call "D:\bat\SO\third.bat" name address

注意,33955749.bat和33955749b.bat脚本都是

  • 接受(部分或完全限定)到被调用脚本的路径,即使有空格;
  • 另一方面,即使提供了文件扩展名,它们也会忽略文件扩展名,并强制使用.bat。

例如,33955749 name address first.cmd second.cmd会尝试调用first.bat和second.bat。

Resources (必需阅读,不完整):

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33955749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档