搞开发很累啊,一行行代码看的我眼睛都花了,改了一堆BUG,然后要上传测试站点,还得一个个摘出来,jsp就忍了,java还得慢慢去classes文件夹里面摸,哎,更可恶的是有的工具类都有内部类,一不小心忘了把 xxx$yyy.class 拿出来,又得回头找一遍,一层层地建文件夹装进去,更新到jar包里,等搞完人都虚了,还不知道有没有漏掉的。这个工具就是送给以上人士的,只需把一个写有要更新的文件相对路径的文件列表,拖到这个脚本上面,它就能自动按照你工程的文件夹结构,复制出需要的文件,如果列表里面有java文件的话,它还会去复制出对应的class文件(包括内部类的),并且能够记录日志,看到列表中文件的处理结果。是不是很方便,最后只需要把文件夹往ftp一拖就OK了!保存为 FileExtractor.vbs' 设置项目源文件所在的工作路径
FromFolder  = "D:\Work\Projects\genertec\workspace"
' 目标文件夹
LocRoot     = "C:\Documents and Settings\issuser\桌面\UPLOAD"
' 记录操作结果的日志文件名称
LogFileName = "~$result$.log"'=================================================================
If WScript.Arguments.Count = 0 Then
MsgBox "把包含文件列表的文本文件拖到我上面来!", 4112, "未指定文件清单"
WScript.Quit
End If
FileList   = WScript.Arguments(0)
Set ValidPath = new RegExp
ValidPath.Pattern = "^[ \t]*\/|\\?(\/|\\[\w\-]+)+(\.\w+)[ \t]*$"
Set fso = CreateObject("Scripting.FileSystemObject")
FromFolder = fso.GetFolder(FromFolder).Path
StartPos = UBound(Split(FromFolder, "\")) + 1
ThisPath = Left(WScript.ScriptFullName, Len(WScript.ScriptFullName) - Len(WScript.ScriptName) -1)
SkipLog  = ""
SuccLog  = ""
ErrLog   = ""Set f = fso.OpenTextFile(FileList)
Do Until f.AtEndOfStream
OneLine = f.ReadLine()
If ValidPath.Test(OneLine) Then
TheExactFile = Trim(Replace(Replace(OneLine, "/", "\"), vbTab, ""))
If fso.FileExists(FromFolder & "\" & TheExactFile) Then
' 如果是java文件,复制对应的class文件
If LCase(Right(TheExactFile, 5)) = ".java" Then
' class 文件所在目录,如果文件夹名不是 classes,可以自己调整
TheBinFile = Replace(TheExactFile, "\src\", "\classes\")
TheBinFile = Replace(FromFolder & "\" & Replace(TheBinFile, ".java", ".class"), "\\", "\")
CopyOneFile TheBinFile
End If
TheExactFile = Replace(FromFolder & "\" & TheExactFile, "\\", "\")
' 复制原始文件
CopyOneFile TheExactFile
Else
SkipLog = SkipLog & vbCrLf & OneLine
End If
Else
SkipLog = SkipLog & vbCrLf & OneLine
End If
Loopfso.CreateTextFile(ThisPath & "\" & LogFileName, True).Write _
"======================== 成功复制以下文件 ========================" & vbCrLf & SuccLog & vbCrLf & vbCrLf & _
"======================== 下列文件复制失败 ========================" & vbCrLf & ErrorLog & vbCrLf & vbCrLf & _
"================== 以下是原列表文件中被忽略的行 ==================" & vbCrLf & SkipLog & vbCrLf'MsgBox "操作结束,结果请查看日志文件:" & vbCrLf & vbCrLf & ThisPath & "\" & LogFileName, 64, "完成"
CreateObject("WScript.Shell").Run Chr(34) & ThisPath & "\" & LogFileName & Chr(34)Function CopyOneFile(filespec)
On Error Resume Next
CurrentPath = fso.GetFolder(LocRoot).Path
Names = Split(filespec, "\")
For i = StartPos To UBound(Names) - 1
CurrentPath = CurrentPath & "\" & Names(i)
If Not fso.FolderExists(CurrentPath) Then fso.CreateFolder CurrentPath
Next
TargLoc = CurrentPath & "\" & Names(UBound(Names))
If fso.FileExists(TargLoc) Then fso.DeleteFile TargLoc, True
fso.CopyFile filespec, TargLoc, True
If Err.Number <> 0 Then
ErrLog = ErrLog & vbCrLf & filespec
Err.Clear
Else
SuccLog = SuccLog & vbCrLf & filespec
End If
' 复制内部类class
If LCase(Right(filespec, 6)) = ".class" Then
filespec = Replace(filespec, ".class", "$*.class")
fso.CopyFile filespec, CurrentPath, True
If Err.Number <> 0 Then
ErrLog = ErrLog & vbCrLf & filespec
Err.Clear
Else
SuccLog = SuccLog & vbCrLf & filespec
End If
End If
On Error Goto 0
End Function

解决方案 »

  1.   

    还是给写示例图片吧,方便了解使用过程:1.工作区项目路径示意图
    2.项目结构
    3.文件列表格式。这个是很随意的,它只会复制样式为 /aaa/bbb/ccc.ddd 这样的,就是在Eclipse的 Navigator 试图中右键属性获得的路径,其他都会忽略。
    4.把这个列表拖到脚本上,执行完后自动打开日志文件,内容如下:
    5.这个是复制出来的文件结构。