我有以下VB脚本 如何用case语法编写这个VB脚本?如果那时候为了进行专业写作...... 耶尔
Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists("C:\file1 ")) Then
Verification=ok
Else
WScript.Echo("file1")
Wscript.Quit(100)
End If
If (fso.FileExists("C:\file2 ")) Then
Verification=ok
Else
WScript.Echo("file2")
Wscript.Quit(100)
End If
If (fso.FileExists("C:\file3 ")) Then
Verification=ok
Else
WScript.Echo("file3")
Wscript.Quit(100)
End If
。 。 。
答案 0 :(得分:4)
在VB(或vbs)中有with
子句或其他语言中的switch
等替代品,但是这些用于单个给定条件/ var然后检查它们的值但是因为你不必检查单个事物,例如多个文件名C:\file1
,C:\file2
等,因此在这种情况下不适用它们。
作为另一种选择,您可以使用循环,因为文件名编号在您的代码中似乎是一致的:
For i 1 To 3
If (fso.FileExists("C:\file" & i)) Then
Verification = ok
Else
WScript.Echo("file" & i)
Wscript.Quit(100)
End If
Next
总而言之,上面的代码是代码的简写。
答案 1 :(得分:0)
虽然可能需要更多代码行,但您可以实现一个简单的有限状态机来执行此操作。然后,不使用if / then结构,而是使用某种类型的switch语句,其中包含一组枚举的“状态”,您可以使用它们。
这详细介绍了FSM http://en.wikipedia.org/wiki/Finite-state_machine,并且使用枚举和切换语句很容易实现它们。
我刚刚抓住了Google的这个,这是C:中的一个简单的FSM实现:
#include <stdio.h>
main()
{
int c;
START:
switch(c = getchar()){
case 'f' : goto F;
case 'b' : goto B;
case EOF : goto FAIL;
default: goto START; }
F:
switch(c = getchar()){
case 'o' : goto FO;
case EOF : goto FAIL;
default : goto START;}
FO:
switch(c = getchar()){
case 'o' : goto SUCCESS;
case EOF : goto FAIL;
default : goto START;}
B:
switch(c = getchar()){
case 'a' : goto BA;
case EOF : goto FAIL;
default : goto START;}
BA:
switch(c = getchar()){
case 'r' : goto SUCCESS;
case EOF : goto FAIL;
default : goto START;}
FAIL:
printf("Does not match.\n");
return;
SUCCESS:
printf("Matches.\n");
return;
}
答案 2 :(得分:0)
您不能将select / case用于此类事物,但还有其他方法可以压缩或简化代码。
首先,反转测试条件:
If Not (fso.FileExists("C:\file1 ")) Then
WScript.Echo("file1")
Wscript.Quit(100)
End If
这样可以避免在if / then之后需要“不执行任何操作”命令。
接下来,您可以在函数和子例程中进行包装,以减少重复的代码:
function TestFile(sFileName)
TestFile = fso.FileExists(sFileName)
end function
sub ErrorExit(sMessage, nCode)
WScript.Echo sMessage
WScript.Quit nCode
end sub
然后你的一系列测试成为:
if not TestFile("c:\file1") then
ErrorExit "file1 not found", 100
elseif not TestFile("c:\file2") then
ErrorExit "file2 not found", 100
elseif not TestFile("c:\file3") then
ErrorExit "file3 not found", 100
end if