使用for循环访问命令提示符

时间:2014-11-08 01:20:49

标签: powershell vbscript

我想在命令行中调用函数Christian.exe来处理索引为" reentrant_008.sif"的一系列文件。 (8是一个示例数字)。

"Christian.exe reentrant_00" & num & ".sif reentrant_00" & num & ".pgm" 0 2000是需要输入命令提示符以便程序执行的文本(num是任意数字)

大约有400个文件,所以我想创建一个vbs代码,为每个文件调用命令提示符,直到所有文件都被访问为止,这是我的代码:

For
Dim cmdpath
num = CStr(i)

Set wshShell = WScript.CreateObject ("WSCript.shell")

If i < 10 Then
    cmdpath = "Christian.exe reentrant_00" & num & ".sif reentrant_00" & num & ".pgm" 0 2000
Else

    If i < 100 Then
        cmdpath = "Christian.exe reentrant_0" & num & ".sif reentrant_0" & num & ".pgm" 0 2000
    Else
        cmdpath = "Christian.exe reentrant_" & num & ".sif reentrant_" & num & ".pgm" 0 2000
    End If

End If

wshshell.run cmdpath

Next

问题是正在为每个文件调用一个新的命令提示符,这会降低我的计算机速度。如何确保只调用一个解决我所有文件的命令窗口?

2 个答案:

答案 0 :(得分:1)

如果查看Run的{​​{3}},您会看到两个选项参数[intWindowStyle], [bWaitOnReturn]。如果您希望EXE在继续执行脚本之前等待,请更改对此

的调用
wshshell.run cmdpath, 0, True

0将隐藏窗口,True将等待程序完成,然后再继续执行脚本。根据您的需要,您可以更改号码或将其删除。

wshshell.run cmdpath,, True

答案 1 :(得分:1)

由于您使用标记了问题,因此我添加了PowerShell解决方案:

foreach ($i in 1..400) {
  $num = "{0:d3}" -f $i
  & Christian.exe "reentrant_${num}.sif" "reentrant_${num}.pgm" 0 2000
}

&是呼叫运营商。我建议您在PowerShell中运行外部命令时使用它,因为否则当您第一次尝试从变量运行命令时,您会感到惊讶:

$christian = "Christian.exe"
$christian ...          # <-- throws an error, because $christian contains a
                        #     string, which is NOT automagically interpreted
                        #     as a command by PowerShell
& $christian ...        # <-- works

-f是格式化运算符,允许您创建格式化的字符串输出。由于命令行仅因输入和输出文件的零填充而不同,因此使用预填充的数字字符串构建文件名会更好。

我建议在VBScript中进行预填充:

For i = 1 To 400
  num = Right("000" & i, 3)
  cmdpath = "Christian.exe reentrant_" & num & ".sif reentrant_" & num & _
            ".pgm" 0 2000
  wshshell.run cmdpath, 0, True
Next