Batch file 如何为批量传递给脚本的逗号分隔参数应用循环?

Batch file 如何为批量传递给脚本的逗号分隔参数应用循环?,batch-file,Batch File,我有下面列出的文件夹列表: C:\程序文件 C:\temp 约翰·斯诺 我必须将逗号分隔的参数传递给脚本,如下所示: script.bat C:\Program Files,C:\temp,C:\John Snow 在传递到脚本之后,我需要过滤掉逗号分隔的参数并应用于每个循环,回显参数值并执行dir命令以列出该控制器中的文件 set "args=%*" set "args=%args:,=","%" for %%# in ("%args%") do ( dir "%%~#" ) 试试

我有下面列出的文件夹列表:

  • C:\程序文件
  • C:\temp
  • 约翰·斯诺
我必须将逗号分隔的参数传递给脚本,如下所示:

script.bat C:\Program Files,C:\temp,C:\John Snow
在传递到脚本之后,我需要过滤掉逗号分隔的参数并应用于每个循环,回显参数值并执行dir命令以列出该控制器中的文件

set "args=%*"
set "args=%args:,=","%"
for %%# in ("%args%") do (
  dir "%%~#"
)
试试这个

@ECHO OFF
SETLOCAL EnableExtensions
set "_params=%*"
if not defined _params (
  echo %~nx0: nothing to do
  pause
  exit /B
)
set "_params=%_params:,=","%"
for %%G in ("%_params%") do (
  echo dir "%%~G"
)
输出

==> 37321331.bat
37321331.bat: nothing to do
Press any key to continue . . .

==> 37321331.bat C:\Program Files,C:\temp,C:\John Snow
dir "C:\Program Files"
dir "C:\temp"
dir "C:\John Snow"

==>
上面的脚本需要详细说明:如果某个参数包含在一对双引号中,则脚本将失败:

==> 37321331.bat C:\Program Files,C:\temp,"C:\John Snow"
dir "C:\Program Files"
dir "C:\temp"
dir ""C:\John"
dir "Snow"""
编辑。使用下一个代码段修复它:
set“\u params=%\u params:“=%”
将从提供的字符串中删除所有的
双引号

set "_params=%_params:"=%"
set "_params=%_params:,=","%"
for %%G in ("%_params%") do (
  echo dir "%%~G"
)
资源(必读,不完整):

  • (命令参考)
  • (其他特殊性)
  • %~G
    %*
    等特殊页面)
  • %变量:strofind=NewStr%
    等)

您需要在
script.bat中迭代参数,或者您想用每个项调用script.bat?我需要在script.bat中迭代参数。在for循环中,我需要对每个参数执行DIR命令。您可以传递由双引号包围的参数列表,并在脚本中使用%1访问该列表。从那里,您可以使用
for/f
命令作为分隔符进行迭代。检查。@Danial Luz,如果你能为我写的话,它会更好,因为我不太擅长批处理脚本。%%#值为空,它只是列出当前的目录文件。它是这样的(我使用了ech dir“%%~”):
c:\batch>com.bat“c:\Program files,c:\John Snow”dir“c:\Program”dir“files”,“c:\John”dir“dir”Snow”
It以空格作为分隔符。@ThejeshPR您要通过用双引号括起来的行吗?对我来说,它是这样来的:c:\batch>com.bat“c:\Program Files,c:\John Snow”dir“c:\Program”dir“Files”,“c:\John”dir“Snow”“@ThejeshPR这种行为我已经告诫过了:请阅读完整的答案。@ThejeshPR修正了双引号。请考虑接受最有用的答案。来解释为什么这很重要。