【问题标题】:How to apply for loop for comma separated arguments passed to the script in batch?如何为批量传递给脚本的逗号分隔参数申请循环?
【发布时间】:2016-05-19 11:04:59
【问题描述】:

我有一个文件夹列表如下:

  • C:\Program 文件
  • C:\temp
  • C:\约翰·斯诺

我必须将逗号分隔的参数传递给脚本,如下所示:

script.bat C:\Program Files,C:\temp,C:\John Snow

传递给脚本后,我需要过滤掉逗号分隔的参数并应用每个循环并回显参数值并执行 dir 命令以列出该目录中的文件

【问题讨论】:

  • 您需要在script.bat 中迭代参数,或者您想使用每个项目调用脚本 .bat?
  • 我需要在 script.bat 中迭代参数。在 for 循环中,我需要为每个参数执行 DIR 命令
  • 您可以传递用双引号括起来的参数列表,并在脚本中使用 %1 访问此列表。从那里您可以使用for /f 命令进行迭代,将“,”作为分隔符。检查here
  • @Danial Luz,如果你能为我写它会更好,因为我在批处理脚本方面不是那么好..

标签: batch-file


【解决方案1】:
@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"""

编辑。使用下一个代码 sn-p 修复它:set "_params=%_params:"=%" 将从提供的字符串中删除所有 " 双引号。

set "_params=%_params:"=%"
set "_params=%_params:,=","%"
for %%G in ("%_params%") do (
  echo dir "%%~G"
)

资源(必读,不完整):

【讨论】:

  • 对我来说是这样的:c:\batch>com.bat "c:\Program Files,c:\John Snow" dir ""c:\Program" dir "Files"," c:\John" dir "雪"""
  • @ThejeshPR 我已经警告过这种行为:请阅读整个答案。
  • @ThejeshPR 修复了双引号。请考虑将最有帮助的答案标记为已接受。 See this page 解释为什么这很重要。
【解决方案2】:
set "args=%*"
set "args=%args:,=","%"
for %%# in ("%args%") do (
  dir "%%~#"
)

试试这个。

【讨论】:

  • %%# 值将变为 NULL,它只是列出当前目录文件。
  • 它是这样来的(我已经使用 ech dir "%%~#"):c:\batch>com.bat "c:\Program Files,c:\John Snow" dir ""c:\Program" dir "Files","c:\John" dir "Snow""" 它以空间作为分隔符。
  • @ThejeshPR 你在通过双引号包围的行吗?
猜你喜欢
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2020-02-05
  • 2019-04-20
  • 2016-06-22
  • 2014-10-12
  • 2014-02-01
  • 2016-10-19
相关资源
最近更新 更多