2011-01-05 73 views
1

我正在Windows XP中编写批处理文件。我已将一组*.ts文件复制到我的exe目录中。 TS文件的数量不是固定的,因此它们的名称不同。作为参数传递给Windows批处理文件时,*。*的扩展

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

在Linux中我试图像 <MyExeName> *.ts

这个工作。但是当我在Windows中做同样的事情时,它并没有扩大*.ts

请让我知道如何扩展*.ts,同时将参数传递给我的exe文件。

回答

1

你可以使用一个for循环来enumarate所有* .ts文件,像

for %%f in (*.ts) do echo %%f 
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%第一次循环迭代。

+0

嗨,谢谢你的回复。我试过了延迟的环境变量扩展方法。它在命令行中适用于我。所以我尝试把它放到一个批处理文件中。但是那个时候,一旦启用了环境变量扩展(使用cmd/V = ON),echo命令和上面的方法不起作用。可能是它正在创建一个新的命令行,我无法执行此操作。所以我们如何才能使它成为批处理文件。 – Aneesh 2011-01-07 10:51:31

+0

@Aneesh,我想我找到了一个可以在批处理文件中工作的配方。有关详细信息,请参阅我对编辑的回答。我已经在Win 7下测试了它。 – RBerteig 2011-01-07 20:04:47

+0

嗨,RBerteig,非常感谢。这对我很好。 :) .. – Aneesh 2011-01-10 12:19:47

相关问题