【问题标题】:Batch File - Passing Multiple Inputs批处理文件 - 传递多个输入
【发布时间】:2016-05-03 17:20:05
【问题描述】:

我有一个正在处理的批处理文件,它将接受用户输入并根据该输入信息执行操作。我的问题是,我不必一遍又一遍地运行文件,将文件类型逐个放入,我如何将其写入用户可以放入多个选项的位置。 (文件 1、文件 2、文件 3)。这是现在的样子:

set /p FileType=Enter file type here: (this is where I would like the user to be able to put in more than just one file type if needed.)

谢谢!

【问题讨论】:

  • 我觉得您的代码比您所展示的内容更多,因为您发布的内容完美无缺。
  • 您是否正在寻找 for 循环/for /? 来帮助解决这个问题,只需设置一个分隔符,即逗号。
  • 感谢您的反馈。是的,它可以工作,但只有 1 个输入(如果有意义的话)。我希望能够输入 txt、xlsx、docx,而不是一遍又一遍地运行批处理文件。

标签: windows variables batch-file automation


【解决方案1】:

您可以编写一个解析用户输入的循环。这是一种方法:

set /p "FileType=Enter file type(s) here (ex: txt, pdf, docx): "
for /f "tokens=1-3 delims=, " %%A in ("%FileType%") do (
    set ftA=%%A
    set ftB=%%B
    set ftC=%%C
)
dir *.%ftA% *.%ftB% *.%ftC%

这有其局限性。首先,它的可扩展性不是很高。您必须在代码中添加额外的变量(ftD、ftE 等)才能处理超过 3 个参数。此外,如上所述,如果给定的参数少于 3 个,则仍然设置其余变量,但具有空白值。这意味着您必须先检查该变量是否具有值 (if not "%ftC%"==""),然后才能可靠地使用它。

如果您实际上不需要将用户输入传递作为以后使用的变量,您可以按照@SomethingDark 的建议直接循环用户输入。

set /p "FileType=Enter file type(s) here (ex: txt pdf docx): "
for %%A in (%FileType%) do (dir *.%%A)

【讨论】:

  • 你甚至不需要for /f 循环,只需一个常规的for 循环:for %%A in (%FileType%) do whatever
  • @SomethingDark 如果没有/f,你如何获取额外的令牌?
  • 常规 for 迭代列表中的每个项目。该列表由空格或逗号分隔,因此当%FileType% 等于pdf txt docxpdf,txt,docxfor %%A in (%filetype%) do echo %%A 将导致echo pdf 后跟echo txt 后跟echo docx
  • 更简单:for %%A in (*.%FileType: = *.%) do echo Processing file: %%A(当列表以空格分隔时)
猜你喜欢
  • 2019-01-04
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
相关资源
最近更新 更多