Vbscript 根据文件名区分文件

Vbscript 根据文件名区分文件,vbscript,Vbscript,我有一个需要循环浏览的文件文件夹。每个文件将根据其文件名进行不同的处理。文件名中第二个“u”后面的部分是执行哪个进程的关键。问题是,它们的名字很相似,我找不到区分它们的方法。它们总是作为进程1出现 我尝试过的文件和代码的典型文件夹: NV_DB62_mainx_ux.dxf NV_DB62_mainxsplashroad.dxf NV_DB62_mainxplashroadONLY.dxf NV_DB62_mainssplash.dxf NV_DB63_mainx_dxf NV_DB63_mai

我有一个需要循环浏览的文件文件夹。每个文件将根据其文件名进行不同的处理。文件名中第二个“u”后面的部分是执行哪个进程的关键。问题是,它们的名字很相似,我找不到区分它们的方法。它们总是作为进程1出现

我尝试过的文件和代码的典型文件夹:

NV_DB62_mainx_ux.dxf
NV_DB62_mainxsplashroad.dxf
NV_DB62_mainxplashroadONLY.dxf
NV_DB62_mainssplash.dxf
NV_DB63_mainx_dxf
NV_DB63_mainxsplashroad.dxf
NV_DB63_mainxplashroadONLY.dxf
NV_DB63_mainssplash.dxf
Set App=CreateObject(“Illustrator.Application”)
设置FSO=CreateObject(“Scripting.FileSystemObject”)
设置SourceFolder=FSO.GetFolder(“S:\NV\Section\u 13\Road DXFs”)
Dim FileRef
对于SourceFolder.Files中的每个FileRef
如果Instr(FileRef,“mainx”)>0,则
调用进程1(FileRef)
ElseIf Instr(FileRef,“mainxsplashroad”)>0然后
调用进程2(FileRef)
ElseIf Instr(FileRef,“mainxsplashroadONLY”)>0然后
调用进程3(FileRef)
ElseIf Instr(FileRef,“mainsplash”)>0然后
调用进程4(FileRef)
其他的
找不到Msgbox“文件或脚本出现问题。”
如果结束
下一个

正如拉面在评论中指出的,这是一个算法问题


您需要从最具体到最不具体地搜索条目。也就是说,每个If/ElseIf测试都不应该匹配它下面的任何条件(现在,您的
“mainx”
第一个测试匹配它下面的两个条件)。

正如拉面在评论中指出的,这是一个算法问题


您需要从最具体到最不具体地搜索条目。也就是说,每个If/ElseIf测试都不应该匹配它下面的任何条件(现在,您的
“mainx”
第一个测试匹配它下面的两个条件)。

更改您执行测试的顺序。最长的第一个,最短的最后一个。调试器会告诉你为什么你的代码不工作,一点常识会告诉你为什么。如果您首先检查的是
mainx
,并且它位于每个文件名中,那么显然它将始终通过该测试。更改顺序,先测试最长的名称,然后测试下一个最长的名称,然后测试第三个最长的名称,依此类推,直到最短的名称成为最终测试。如果LCase(Mid(fileref.name,8)=LCase(“mainx_dxf”),还指定
`@KenWhite为他的辩护,VBScript没有附带调试器,MS Script调试器已被弃用并从下载中删除。不过,Rob van der Woude有一个非常有用的列表。@AnsgarWiechers同意,但MS Script调试器不是唯一的选项,Visual Studio将调试VBScript,或者附加到进程,或者强制执行它使用
/x
命令行开关。更改执行测试的顺序。最长优先,最短最后。调试器将向您显示代码不工作的原因,一点常识会告诉您原因。如果您首先检查
mainx
,并且它位于每个文件名中,显然它将始终通过该测试。更改顺序先测试最长的名称,然后测试下一个最长的名称,然后测试第三个最长的名称,依此类推,直到最短的名称成为最终测试。如果LCase(Mid(fileref.name,8)=LCase(“mainx_dxf”),也要指定
`@KenWhite为他的辩护,VBScript没有附带调试器,MS Script调试器已被弃用并从下载中删除。不过,Rob van der Woude有一个非常有用的列表。@AnsgarWiechers同意,但MS Script调试器不是唯一的选项,Visual Studio将调试VBScript,或者附加到进程,或者强制执行它使用
/x
命令行开关。