---
title: "Skapa ett vbs-script som flyttar äldre filer baserat på filnamnet"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/110995-skapa-ett-vbs-script-som-flyttar-äldre-filer-baserat-på-filnamnet"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Känning"
published: "2004-09-07T08:02:37.000Z"
updated: "2004-09-20T14:46:45.000Z"
replies: 4
views: 653
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/110995-skapa-ett-vbs-script-som-flyttar-äldre-filer-baserat-på-filnamnet"
---

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

## #1 — Känning, 2004-09-07T08:02Z

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

Permalänk: https://www.webforum.nu/p/110995

## #2 — @nders, 2004-09-08T06:16Z

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

Mvh
@nders

Permalänk: https://www.webforum.nu/p/1433044

## #3 — Jesper T, 2004-09-08T06:43Z

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

Permalänk: https://www.webforum.nu/p/1433061

## #4 — Känning, 2004-09-09T14:50Z

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

Permalänk: https://www.webforum.nu/p/1433986

## #5 — Känning, 2004-09-20T14:46Z

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.

Permalänk: https://www.webforum.nu/p/1442496

---

Tråden på webben: https://www.webforum.nu/amne/asp/110995-skapa-ett-vbs-script-som-flyttar-äldre-filer-baserat-på-filnamnet
