我想在命令行中调用函数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
问题是正在为每个文件调用一个新的命令提示符,这会降低我的计算机速度。如何确保只调用一个解决我所有文件的命令窗口?
答案 0 :(得分:1)
如果查看Run
的{{3}},您会看到两个选项参数[intWindowStyle], [bWaitOnReturn]
。如果您希望EXE在继续执行脚本之前等待,请更改对此
wshshell.run cmdpath, 0, True
0
将隐藏窗口,True
将等待程序完成,然后再继续执行脚本。根据您的需要,您可以更改号码或将其删除。
wshshell.run cmdpath,, True
答案 1 :(得分:1)
由于您使用vbscript和powershell标记了问题,因此我添加了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