我正在Windows XP中编写批处理文件。我已将一组*.ts
文件复制到我的exe目录中。 TS文件的数量不固定,因此名称也不固定。
现在我想运行我的一个exe文件,它将所有的TS名称作为参数。
在Linux中,我尝试过
<MyExeName> *.ts
这很有用。但是,当我在Windows中执行相同操作时,它不会扩展*.ts
。
请告诉我如何在将参数传递给我的exe时展开*.ts
。
答案 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 ENABLEDELAYEDEXPANSION
或DISABLEDELAYEDEXPANSION
参数优先于/V:ON
或/V:OFF
开关。见SETLOCAL /?
详情。
此外,在某些情况下,例如FOR
命令,需要加倍百分号。总之,我会像这样重写我的例子:
SETLOCAL ENABLEDELAYEDEXPANSION
set LIST=
for %%f in (*.ts) do set LIST=!LIST! "%%f"
echo %LIST:~1%
上面还引用了每个文件名来处理其中包含空格的名称,并使用%LIST:~1%
修剪第一个循环迭代留在那里的字符串前面的额外空格。