webForumDet fria alternativet

Skapa ett vbs-script som flyttar äldre filer baserat på filnamnet

ASP

4 svar · 633 visningar · startad av Känning

Medlem sedan jan. 2003252 inlägg
Frågan#1

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

Medlem sedan juni 200032 967 inlägg
#2

Tråden flyttas från Visual Basic till ASP / VBScript, då det är där VBScript-frågor historiskt har avhandlats.

Mvh
@nders

Medlem sedan nov. 20017 144 inlägg
#3

Det borde väl gå bra att göra det. Sök på FSO

Medlem sedan jan. 2003252 inlägg
#4

Ska försöka mig på detta då, återkommer med lite kod efter hand.

Medlem sedan jan. 2003252 inlägg
#5

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.

250 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)