在项目中,想使用某个目录来创建一个工程,以方便调试,但发现Visual Studio 2003不支持创建工程来自目录,得让你自己一个一个的添加过滤目录,添加文件列表,很不方便。特写了此脚本方便创建,考虑有可能其他网友或有需要,特贴上以共享
--CreateProjectByPath.vbs
Dim fso, ProjectName, ProjectPath, FileFilter, SkipPathList, result
Dim totalfiles, curfileinx, totalfolders, curfolderinx
totalfiles = 0
curfileinx = 0
totalfolders = 1
curfolderinx = 1
if (wscript.arguments.count >= 1 and wscript.arguments.count <= 4) then
ProjectName = wscript.arguments(0)
if (wscript.arguments.count = 1) then
ProjectPath = """."""
FileFilter = ".*/.(cpp|c|cxx|hpp|h|def|odl|idl|hpj|bat|asm|asmx)"
SkipPathList = """"
else if (wscript.arguments.count = 2) then
ProjectPath = wscript.arguments(1)
FileFilter = ".*/.(cpp|c|cxx|hpp|h|def|odl|idl|hpj|bat|asm|asmx)"
SkipPathList = """"
else if (wscript.arguments.count = 3) then
ProjectPath = wscript.arguments(1)
FileFilter = wscript.arguments(2)
SkipPathList = """"
else if (wscript.arguments.count = 4) then
ProjectPath = wscript.arguments(1)
FileFilter = wscript.arguments(2)
SkipPathList = wscript.arguments(3)
end if
end if
end if
end if
CreateProjectByPath ProjectName, ProjectPath, FileFilter, SkipPathList
wscript.stdout.write result
else
ShowUsage
end if
Sub ShowUsage
wscript.echo wscript.scriptname & " projectname projectpath FileFilter"
wscript.echo "---FileFilter Syntax: use regex syntax"
End Sub
Sub CreateProjectByPath(ProjectName, ProjectPath, FileFilter, SkipPathList)
Set fso = CreateObject("Scripting.FileSystemObject")
tabCount = 1
flag = 1
result = result & "<?xml version=""1.0"" encoding=""gb2312""?>" & chr(13) & chr(10)
result = result & "<VisualStudioProject" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "ProjectType=""Visual C++""" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "Version=""7.10""" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "Name=""" & ProjectName & """" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "ProjectGUID=""{00000000-0000-0000-0000-888888888888}""" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "Keyword=""Win32Proj"">" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "<Platforms>" & chr(13) & chr(10)
result = result & MakeTab(tabCount+1) & "<Platform" & chr(13) & chr(10)
result = result & MakeTab(tabCount+2) & "Name=""Win32""/>" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "</Platforms>" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "<Configurations>" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "<Configuration" & chr(13) & chr(10)
result = result & MakeTab(tabCount+1) & "Name=""Debug|Win32""" & chr(13) & chr(10)
result = result & MakeTab(tabCount+1) & "OutputDirectory=""Debug""" & chr(13) & chr(10)
result = result & MakeTab(tabCount+1) & "IntermediateDirectory=""Debug""" & chr(13) & chr(10)
result = result & MakeTab(tabCount+1) & "ConfigurationType=""1""" & chr(13) & chr(10)
result = result & MakeTab(tabCount+1) & "CharacterSet=""2"">" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "</Configuration>" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "<Configuration" & chr(13) & chr(10)
result = result & MakeTab(tabCount+1) & "Name=""Release|Win32""" & chr(13) & chr(10)
result = result & MakeTab(tabCount+1) & "OutputDirectory=""Release""" & chr(13) & chr(10)
result = result & MakeTab(tabCount+1) & "IntermediateDirectory=""Release""" & chr(13) & chr(10)
result = result & MakeTab(tabCount+1) & "ConfigurationType=""1""" & chr(13) & chr(10)
result = result & MakeTab(tabCount+1) & "CharacterSet=""2"">" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "</Configuration>" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "</Configurations>" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "<References>" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "</References>" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "<Files>" & chr(13) & chr(10)
IteratorPath ProjectPath, FileFilter, SkipPathList, "IteratorProjectFiles", flag, tabCount + 1
result = result & MakeTab(tabCount) & "</Files>" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "<Globals>" & chr(13) & chr(10)
result = result & MakeTab(tabCount) & "</Globals>" & chr(13) & chr(10)
result = result & "</VisualStudioProject>"
End Sub
function MakeTab(tabCount)
dim ret
for i = 1 to tabcount
ret = ret & chr(9)
next
MakeTab = ret
end function
Sub IteratorPath(path, FileFilter, SkipPathList, IteratorFunc, flag, tabcount)
Dim folder, subfolders, subfiles
Set folder = fso.GetFolder(path)
if not fso.FolderExists(path) then
wscript.echo path
wscript.echo "path's not exists"
exit sub
end if
if (SKipPathList <> "") then
if (MatchFilter(path, SkipPathList)) then
exit sub
end if
end if
set subfolders = folder.SubFolders
totalfolders = totalfolders + subfolders.count
if flag = 1 then
result = result & MakeTab(tabCount) & "<Filter" & chr(13) & chr(10) _
& MakeTab(tabCount + 1) & "Name=""" & folder.name & """" & chr(13) & chr(10) _
& MakeTab(tabCount + 1) & "Filter=""cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx""" & chr(13) & chr(10) _
& MakeTab(tabCount + 1) & "UniqueIdentifier=""{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"">" & chr(13) & chr(10)
flag = 0
else
result = result & MakeTab(tabCount) & "<Filter" & chr(13) & chr(10) _
& MakeTab(tabCount + 1) & "Name=""" & folder.name & """" & chr(13) & chr(10) _
& MakeTab(tabCount + 1) & "Filter="""">" & chr(13) & chr(10)
end if
for each subfolder in subfolders
curfolderinx = curfolderinx + 1
curpath = path & "/" & subfolder.name
IteratorPath curpath, FileFilter, SkipPathList, IteratorFunc, flag, tabcount + 1
next
cmd = IteratorFunc & " """ & path & """, """ & FileFilter & """," & tabcount + 1
execute cmd
result = result & MakeTab(tabCount) &"</Filter>" & chr(13) & chr(10)
End Sub
Function MatchFilter(stringspec, filter)
Dim RegEx, Matches
Set RegEx = new RegExp
RegEx.Pattern = filter
RegEx.IgnoreCase = true
RegEx.Global = true
Set Matches = RegEx.execute(stringspec)
MatchFilter = Matches.count > 0
End Function
Sub IteratorProjectFiles(path, FileFilter, tabcount)
set iterfolder = fso.GetFolder(path)
totalfiles = totalfiles + iterfolder.files.count
for each file in iterfolder.files
if (MatchFilter(file.name, FileFilter)) then
result = result & MakeTab(tabCount) & "<File" & chr(13) & chr(10) _
& MakeTab(tabCount+1) & "RelativePath=""" & path & "/" & file.name & """>" & chr(13) & chr(10) _
& MakeTab(tabCount) & "</File>" & chr(13) & chr(10)
end if
curfileinx = curfileinx + 1
wscript.stderr.write curfolderinx & "/" & totalfolders & " folders are handled," & curfileinx & "/" & totalfiles & " files are handled!" & chr(13)
next
End Sub
如果想生成VC2005工程,仅需要把版本号version="7.10"改成version="8.00"即可