在Windows批处理文件中作为参数传递给exe时扩展*。*

时间:2011-01-05 05:35:26

标签: batch-file command-line-arguments

我正在Windows XP中编写批处理文件。我已将一组*.ts文件复制到我的exe目录中。 TS文件的数量不固定,因此名称也不固定。

现在我想运行我的一个exe文件,它将所有的TS名称作为参数。

在Linux中,我尝试过 <MyExeName> *.ts

这很有用。但是,当我在Windows中执行相同操作时,它不会扩展*.ts

请告诉我如何在将参数传递给我的exe时展开*.ts

3 个答案:

答案 0 :(得分:1)

Windows shell(命令处理器)在调用外部命令时从不进行任何通配;你必须自己做。对于C,请参阅Globbing in C++/C, on Windows

答案 1 :(得分:1)

您可以使用FOR-Loop枚举所有* .ts文件,例如

for %%f in (*.ts) do echo %%f

答案 2 :(得分:0)

接近SET /?输出的结尾是关于延迟环境变量提取的宝石。它显示了如何使用一个相对较新的表示法(因为NT 3.1?它适用于XP和Win 7),用于延迟扩展环境变量,以构建一个与单个变量中的通配符匹配的文件名列表。

  

延迟环境变量扩展允许您使用不同的   用于扩展环境变量的字符(感叹号)   执行时间处理时间。如果启用了延迟变量扩展,则执行上述操作   示例可按如下方式编写,以按预期工作:

set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%

请注意,这里存在引用包含空格或其他“有趣”字符的名称的问题,这些字符是我留给学生的练习。在CMD.EXE中获得正确的引用比在任何Unix shell中正确引用更难。

当然,用命令行替换echo命令。

编辑:据观察,这在批处理文件中似乎不起作用,并且取决于启用延迟扩展的具体功能。

延迟扩展功能通过/V:ON切换到CMD.EXE启用,或全局通过注册表项对CMD进行所有调用。详细信息记录在CMD /?的输出中。

转到批处理文件,您有几个问题,并且可以轻松修复以启用该功能。关键是SETLOCAL命令可以选择打开和关闭延迟功能。来自CMD /?

  

在批处理文件中SETLOCAL ENABLEDELAYEDEXPANSIONDISABLEDELAYEDEXPANSION   参数优先于/V:ON/V:OFF开关。见SETLOCAL /?   详情。

此外,在某些情况下,例如FOR命令,需要加倍百分号。总之,我会像这样重写我的例子:

SETLOCAL ENABLEDELAYEDEXPANSION 
set LIST=
for %%f in (*.ts) do set LIST=!LIST! "%%f"
echo %LIST:~1%

上面还引用了每个文件名来处理其中包含空格的名称,并使用%LIST:~1%修剪第一个循环迭代留在那里的字符串前面的额外空格。