Tråden flyttas från Visual Basic till ASP / VBScript, då det är där VBScript-frågor historiskt har avhandlats.
Mvh
@nders
4 svar · 633 visningar · startad av Känning
Hej
På vårat företag skapar vi dokument enligt följande:
Land_Projekt_Nummer_betekning_Version_språk.Titel.doc
Ex:
FR_TPM_186_MET_D0102_EN.Meeting Vectorsoft.doc (alltså ett dokument för Frankrike som är en manual på engelska)
Varje gång någon gör en ändring på ett dokument så skapas det ett nytt dokument med ett nytt versionsnummer. Jag vill skapa ett script som söker igenom alla filer och skickar äldre versioner till en arkivmapp.
Det kan se ut så här i en mapp:
FR_TPM_186_MET_D0101_EN.Meeting Vectorsoft.doc
FR_TPM_186_MET_D0102_EN.Meeting Vectorsoft.doc
FR_TPM_186_MET_D0103_EN.Meeting Vectorsoft.doc
FR_TPM_186_MET_D0201_EN.Meeting Vectorsoft.doc
FR_TPM_186_MET_D0202_EN.Meeting Vectorsoft.doc
Men jag får inte klämm på det så jag tänkte ta till lite hjälp här, så här ser mitt förslag ut:
1. Plockar in en fil.
2. Delar upp filnamnet så att jag bara har kvar FR_TPM_186_MET_D0102
3. Loopar igen alla filer för att kolla om någon har samma filnamn
4. Ifall det finns samma filnamn så kollar jag av versionsnumret
5. Skickar det lägsta versionsnumret till arkiv-mappen
6. Plocka in nästa fil och gör samma sak.
Lite frågor:
Är detta överhuvudtaget möjligt?
Finns det en bättre lösning?
Jag vill helst skriva koden själv då jag måste lära mig, men om någon vill hjälpa mig igång så är jag mycket tacksam.
mvh Johan
Tråden flyttas från Visual Basic till ASP / VBScript, då det är där VBScript-frågor historiskt har avhandlats.
Mvh
@nders
Det borde väl gå bra att göra det. Sök på FSO
Ska försöka mig på detta då, återkommer med lite kod efter hand.
Nu har jag testat lite och fått fram ett första försök. Men jag har lite problem med denna koden. Det som den klarar av nu är att jag tar in en fil (som jag har bestämt innan) och kollar av den. Men hur gör jag för att scriptet ska ta första filen och sedan den andra filen och göra samma sak.
Sedan om jag har skickat filen jag kollar av till arkivet så ska det ju vara en exit där, hur gör man det?
Här är min kod:
strComputer = "."
FileName = ""
FileDocumentID = ""
VersionID = ""
FileName2 = ""
FileDocumentID2 = ""
VersionID2 = ""
VersionID3 = ""
MyFileID = ""
'hämtar in filen som jag ska jämföra med
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objMyFile = objFSO.GetFile("D:\Scripts\1\FR_TPM_186_MET_D0104_DE.Meeting Vectorsoft.doc")
'splittar upp filen i namn + versionsnummer
arrFileName = Split(objMyFile.Name , "_")
For i = 0 to Ubound(arrFileName)
if i = 0 then
FileDocumentID = FileDocumentID & arrFileName(i)
elseif i < 3 then
FileDocumentID = FileDocumentID & "_" & arrFileName(i)
elseif i = 4 then
VersionID = VersionID & arrFileName(i)
end if
Next
'tar bort D:et i D0101
arrFileName = Split(VersionID , "D")
For i = 0 to Ubound(arrFileName)
if i = 1 then
MyFileID = MyFileID & arrFileName(i)
end if
Next
'nu har jag skapat:
'FileDocumentID
'MyFileID
'skapar en lista med filerna som min fil ska jämföras med
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set FileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='D:\Scripts\1'} Where " _
& "ResultClass = CIM_DataFile")
For Each objFile In FileList
'plockar ut filnamnet + versionsnumret
arrFileName = Split(objFile.FileName , "_")
For i = 0 to Ubound(arrFileName)
if i = 0 then
FileDocumentID2 = FileDocumentID2 & arrFileName(i)
elseif i < 3 then
FileDocumentID2 = FileDocumentID2 & "_" & arrFileName(i)
elseif i = 4 then
VersionID2 = VersionID2 & arrFileName(i)
end if
Next
'nu har jag skapat:
'FileDocumentID
'MyFileID
'FileDocumentID2
'VersionsID2 (men denna har dock ett D före)
'kollar om det finns någon fil som heter samma som min fil
if FileDocumentID2 = FileDocumentID then
'ifall så är fallet så tar jag bort D:et
arrFileName = Split(VersionID2 , "D")
For i = 0 to Ubound(arrFileName)
if i = 1 then
VersionID3 = VersionID3 & arrFileName(i)
end if
Next
'sedan så kollar jag vilken som är den senaste versionen och skickar den andre till Archivet.
if VersionID3 > MyFileID then
Wscript.Echo "Send " & objMyFile.Path &" to archive"
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.MoveFile objMyFile.Path , "D:\Scripts\1\Archive\"
elseif MyFileID > VersionID3 then
Wscript.Echo "Send " & objFile.Name &" to archive"
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.MoveFile objFile.Name , "D:\Scripts\1\Archive\"
end if
VersionID3 = ""
VersionID2 = ""
FileDocumentID2 = ""
end if
Next
Såga inte koden för mkt bara nu, det är första gången jag gör detta så jag behöver inte
fy fan vad det här ser ut...
:)
Tacksam för alla andra förslag.