05. januar 2004 - 14:56Der er
21 kommentarer og 1 løsning
Checke for og evt. convertere FILENS navn hvis ulovlige tegn
Visse application kan jo ikke li' at filnavnet indeholder "ulovlige" tegn; her menes eksempelvis {[æåøÆÅØ-!@#=$%&]}
Jeg søger et lille SCRIPT programstump som automatisk kan checke et filnavn for disse tegn og fjerne eller ændre dem i filnavnet. Eksempelvis: Filnavn Før: Sørens Æblegård Filnavn Efter S_rens__bleg_rd eller Srenblegrd
Selve indholdet i filen samt dato må ikke ændres.
Det skal senerer bygges sammen med andre appl. som bearbejder filen..
At det (helst) skal være VBS baseret beror på at jeg vil have mulighed for let at ændre i programmet samt at senerer sammenbygge det med nogle andre projecter.
Selvfølge hvis der findes en "færdig" *.EXE med en løs læsbar *.cfg fil ved siden af kan det også bruges.
' Der kaldes med: WScript XXX.VBS "Sørens Æblegård.avi"
filnavn = WScript.Arguments(0) filnavn = replace(filnavn, "ø", "oe") filnavn = replace(filnavn, "Æ", "ae") ' og de andre bogstavet.. husk små og store bogstaver..
' Der kaldes med: WScript XXX.VBS "Sørens Æblegård.avi"
Option Explicit ' Tvinger programmøren til at definer alle variabler (undgå stavet fejl, osv.) dim filnavn, nyt_filnavn, objFSO ' definer/dimme variabler der skal bruges
filnavn = WScript.Arguments(0) ' hent filnavn nyt_filnavn = filnavn ' smid navet ind i variablen "nyt_filnavn", så der kan arbejdes med det nyt_filnavn = replace(nyt_filnavn, "æ", "ae") ' erstat nyt_filnavn = replace(nyt_filnavn, "ø", "oe") ' erstat nyt_filnavn = replace(nyt_filnavn, "å", "aa") ' erstat nyt_filnavn = replace(nyt_filnavn, "Æ", "AE") ' erstat nyt_filnavn = replace(nyt_filnavn, "Ø", "OE") ' erstat nyt_filnavn = replace(nyt_filnavn, "Å", "AA") ' erstat
Set objFSO = CreateObject( "Scripting.FileSystemObject" ) ' opret FSO objektet objFSO.MoveFile filnavn, nyt_filnavn ' flyt / omdøb Set objFSO = nothing ' destruer objekt for at frigøre hukommelse
En rettelse der checker om man har fået filnavnet med:
' Der kaldes med: WScript XXX.VBS "Sørens Æblegård.avi"
Option Explicit ' Tvinger programmøren til at definer alle variabler (undgå stavet fejl, osv.) dim filnavn, nyt_filnavn, objFSO ' definer/dimme variabler der skal bruges
if WScript.Arguments.Count <> 0 then
filnavn = WScript.Arguments(0) ' hent filnavn nyt_filnavn = filnavn ' smid navet ind i variablen "nyt_filnavn", så der kan arbejdes med det nyt_filnavn = replace(nyt_filnavn, "æ", "ae") ' erstat nyt_filnavn = replace(nyt_filnavn, "ø", "oe") ' erstat nyt_filnavn = replace(nyt_filnavn, "å", "aa") ' erstat nyt_filnavn = replace(nyt_filnavn, "Æ", "AE") ' erstat nyt_filnavn = replace(nyt_filnavn, "Ø", "OE") ' erstat nyt_filnavn = replace(nyt_filnavn, "Å", "AA") ' erstat
Set objFSO = CreateObject( "Scripting.FileSystemObject" ) ' opret FSO objektet objFSO.MoveFile filnavn, nyt_filnavn ' flyt / omdøb Set objFSO = nothing ' destruer objekt for at frigøre hukommelse
' Der kaldes med: WScript XXX.VBS "Sørens Æblegård.avi"
Option Explicit ' Tvinger programmøren til at definer alle variabler (undgå stavet fejl, osv.) dim filnavn, nyt_filnavn, objFSO, i, arrNavn, tmp ' definer/dimme variabler der skal bruges
if WScript.Arguments.Count <> 0 then
filnavn = WScript.Arguments(0) ' hent filnavn nyt_filnavn = filnavn ' smid navet ind i variablen "nyt_filnavn", så der kan arbejdes med det nyt_filnavn = replace(nyt_filnavn, "æ", "ae") ' erstat nyt_filnavn = replace(nyt_filnavn, "ø", "oe") ' erstat nyt_filnavn = replace(nyt_filnavn, "å", "aa") ' erstat nyt_filnavn = replace(nyt_filnavn, "Æ", "AE") ' erstat nyt_filnavn = replace(nyt_filnavn, "Ø", "OE") ' erstat nyt_filnavn = replace(nyt_filnavn, "Å", "AA") ' erstat
tmp = "" arrNavn = split(nyt_filnavn, ".")
for i = LBound(arrNavn) to UBound(arrNavn) - 1 tmp = tmp & arrNavn(i) next
hmm.. nogle forbedringer kunne være, at kunne drag&drop en fil på selve vbs filen.. som det er nu, skal du bruge kommandoen: WScript XXX.VBS "Sørens Æblegård.avi"
og måske kunne man indsætte et check, der checker om filen eksisterer.. ellers får man jo en fejl..
En ny og forbedret udgave :) 1) Den checker om den angivede fil eksisterer, før den arbejder med den. Hvis den ikke gjorde det, ville du få en fejl. 2) Nu kan du trække en fil over på din vbs fil, og slippe den. Det vil ha' samme effekt som en genvej som metode #1.
Her er hele koden:
' Der er 2 måder at kalde scriptet på: ' 1) Der kaldes med: WScript XXX.VBS "Sørens Æblegård.avi" ' 2) Drag&drop (træk&slip) en fil over på din vbs fil.
Option Explicit ' Tvinger programmøren til at definer alle variabler (undgå stave fejl, osv.)
if WScript.Arguments.Count > 0 then ' check om der er flere end 0 argumenter / om der er et filnavn ' Der er flere end 0 argumenter, dvs der er et filnavn...
dim objFSO ' definer/dimme variabler der skal bruges Set objFSO = CreateObject( "Scripting.FileSystemObject" ) ' opret FSO objektet til filstyring
If objFSO.FileExists(WScript.Arguments(0)) Then ' check om den angivede fil, eksisterer ' den angivede fil eksisterer..
dim filnavn, nyt_filnavn ' definer/dimme variabler der skal bruges
filnavn = WScript.Arguments(0) ' hent filnavn nyt_filnavn = filnavn ' smid navet ind i variablen "nyt_filnavn", så der kan arbejdes med det nyt_filnavn = replace(nyt_filnavn, "æ", "ae") ' erstat nyt_filnavn = replace(nyt_filnavn, "ø", "oe") ' erstat nyt_filnavn = replace(nyt_filnavn, "å", "aa") ' erstat nyt_filnavn = replace(nyt_filnavn, "Æ", "AE") ' erstat nyt_filnavn = replace(nyt_filnavn, "Ø", "OE") ' erstat nyt_filnavn = replace(nyt_filnavn, "Å", "AA") ' erstat
dim i, arrBefore, before, arrAfter, after ' definer/dimme variabler der skal bruges
' Få fat på før-rettelserne-filnavnet efter det sidste \: arrBefore = split(filnavn, "\") for i = LBound(arrBefore) to UBound(arrBefore) before = arrBefore(i) next
dim arrTmp, tmp ' definer/dimme variabler der skal bruges
' Få fat på efter-rettelserne-filnavnet efter det sidste \ arrTmp = split(nyt_filnavn, "\") for i = LBound(arrTmp) to UBound(arrTmp) tmp = arrTmp(i) next
' Få fat på selve filnavnet før det sidst punktum: arrAfter = split(tmp, ".") for i = LBound(arrAfter) to UBound(arrAfter) - 1 after = after & arrAfter(i) next
' tilføje "." & filtypen: after = after & "." & arrAfter(Ubound(arrAfter))
dim strSti ' definer/dimme variabler der skal bruges ' Få fat stien til filen: strSti = left(filnavn, inStr(filnavn, before) - 1)
if inStr(strSti, "\") then ' Der er et "\" i stien, derfor skal den tages med: objFSO.MoveFile strSti & before, strSti & after ' flyt / omdøb else ' Der er ikke noget "\" i stien, derfor skal den ikke med: objFSO.MoveFile before, after ' flyt / omdøb end if
Set objFSO = nothing ' destruer objekt for at frigøre hukommelse
else ' Der er ikke angivet noget filnavn: msgbox "Filen '" & WScript.Arguments(0) & "' eksisterer ikke!" end if
bfjmnemonic> Jeg er ikke helt med, hvad du er ude på :) Men ok.. den checker om filnavnet indeholder "æ,ø,å,Æ,Ø,Å":
' Der er 2 måder at kalde scriptet på: ' 1) Der kaldes med: WScript XXX.VBS "Sørens Æblegård.avi" ' 2) Drag&drop (træk&slip) en fil over på din vbs fil.
Option Explicit ' Tvinger programmøren til at definer alle variabler (undgå stave fejl, osv.)
if WScript.Arguments.Count > 0 then ' check om der er flere end 0 argumenter / om der er et filnavn ' Der er flere end 0 argumenter, dvs der er et filnavn...
dim objFSO ' definer/dimme variabler der skal bruges Set objFSO = CreateObject( "Scripting.FileSystemObject" ) ' opret FSO objektet til filstyring
If objFSO.FileExists(WScript.Arguments(0)) Then ' check om den angivede fil, eksisterer ' den angivede fil eksisterer..
dim filnavn, nyt_filnavn ' definer/dimme variabler der skal bruges
filnavn = WScript.Arguments(0) ' hent filnavn
dim abc, arrABC, Skal_Skiftes Skal_Skiftes = "nej" abc = "æ,ø,å,Æ,Ø,Å"
arrABC = split(abc, ",")
for i = LBound(arrABC) to UBound(arrABC) if InStr(filnavn, arrABC(i)) then Skal_Skiftes = "ja" next
if Skal_Skiftes = "ja" then
nyt_filnavn = filnavn ' smid navet ind i variablen "nyt_filnavn", så der kan arbejdes med det nyt_filnavn = replace(nyt_filnavn, "æ", "ae") ' erstat nyt_filnavn = replace(nyt_filnavn, "ø", "oe") ' erstat nyt_filnavn = replace(nyt_filnavn, "å", "aa") ' erstat nyt_filnavn = replace(nyt_filnavn, "Æ", "AE") ' erstat nyt_filnavn = replace(nyt_filnavn, "Ø", "OE") ' erstat nyt_filnavn = replace(nyt_filnavn, "Å", "AA") ' erstat
dim i, arrBefore, before, arrAfter, after ' definer/dimme variabler der skal bruges
' Få fat på før-rettelserne-filnavnet efter det sidste \: arrBefore = split(filnavn, "\") for i = LBound(arrBefore) to UBound(arrBefore) before = arrBefore(i) next
dim arrTmp, tmp ' definer/dimme variabler der skal bruges
' Få fat på efter-rettelserne-filnavnet efter det sidste \ arrTmp = split(nyt_filnavn, "\") for i = LBound(arrTmp) to UBound(arrTmp) tmp = arrTmp(i) next
' Få fat på selve filnavnet før det sidst punktum: arrAfter = split(tmp, ".") for i = LBound(arrAfter) to UBound(arrAfter) - 1 after = after & arrAfter(i) next
' tilføje "." & filtypen: after = after & "." & arrAfter(Ubound(arrAfter))
dim strSti ' definer/dimme variabler der skal bruges ' Få fat stien til filen: strSti = left(filnavn, inStr(filnavn, before) - 1)
if inStr(strSti, "\") then ' Der er et "\" i stien, derfor skal den tages med: objFSO.MoveFile strSti & before, strSti & after ' flyt / omdøb else ' Der er ikke noget "\" i stien, derfor skal den ikke med: objFSO.MoveFile before, after ' flyt / omdøb end if else ' denne linie kan fjernes sammen med den næste linie msgbox "Der skal ikke ske nogen ændringer!" end if
Set objFSO = nothing ' destruer objekt for at frigøre hukommelse
else ' Der er ikke angivet noget filnavn: msgbox "Filen '" & WScript.Arguments(0) & "' eksisterer ikke!" end if
Den her udgave er lidt mere dynamisk.. det nye er:
' Format (uden mellemrum eller andre tegn!): ' gammelt_bogstav,nyt_bogstav,gammelt_bogstav,nyt_bogstav osv:
abc = "æ,ae,ø,oe,å,aa,Æ,AE,Ø,OE,Å,AA"
Så kan man nemt tilføje andre tegn/bogstaver, en lige æ,ø,å,Æ,Ø,Å.
' Der er 2 måder at kalde scriptet på: ' 1) Der kaldes med: WScript XXX.VBS "Sørens Æblegård.avi" ' 2) Drag&drop (træk&slip) en fil over på din vbs fil.
Option Explicit ' Tvinger programmøren til at definer alle variabler (undgå stave fejl, osv.)
if WScript.Arguments.Count > 0 then ' check om der er flere end 0 argumenter / om der er et filnavn ' Der er flere end 0 argumenter, dvs der er et filnavn...
dim objFSO ' definer/dimme variabler der skal bruges Set objFSO = CreateObject( "Scripting.FileSystemObject" ) ' opret FSO objektet til filstyring
If objFSO.FileExists(WScript.Arguments(0)) Then ' check om den angivede fil, eksisterer ' den angivede fil eksisterer..
dim filnavn, nyt_filnavn ' definer/dimme variabler der skal bruges
filnavn = WScript.Arguments(0) ' hent filnavn
dim abc, arrABC, Skal_Skiftes Skal_Skiftes = "nej" abc = "æ,ø,å,Æ,Ø,Å" ' her tilføjs de bogstaver der checkes om de eksisterer i filnavnet
arrABC = split(abc, ",")
for i = LBound(arrABC) to UBound(arrABC) if InStr(filnavn, arrABC(i)) then Skal_Skiftes = "ja" next
if Skal_Skiftes = "ja" then nyt_filnavn = filnavn ' smid navet ind i variablen "nyt_filnavn", så der kan arbejdes med det
' Format (uden mellemrum eller andre tegn!): ' gammelt_bogstav,nyt_bogstav,gammelt_bogstav,nyt_bogstav osv:
abc = "æ,ae,ø,oe,å,aa,Æ,AE,Ø,OE,Å,AA"
arrABC = split(abc, ",") for i = Lbound(arrABC) to (Ubound(arrABC) / 2) step 2 nyt_filnavn = replace(nyt_filnavn, arrABC(i), arrABC(i+1)) ' erstat next
dim i, arrBefore, before, arrAfter, after ' definer/dimme variabler der skal bruges
' Få fat på før-rettelserne-filnavnet efter det sidste \: arrBefore = split(filnavn, "\") for i = LBound(arrBefore) to UBound(arrBefore) before = arrBefore(i) next
dim arrTmp, tmp ' definer/dimme variabler der skal bruges
' Få fat på efter-rettelserne-filnavnet efter det sidste \ arrTmp = split(nyt_filnavn, "\") for i = LBound(arrTmp) to UBound(arrTmp) tmp = arrTmp(i) next
' Få fat på selve filnavnet før det sidst punktum: arrAfter = split(tmp, ".") for i = LBound(arrAfter) to UBound(arrAfter) - 1 after = after & arrAfter(i) next
' tilføje "." & filtypen: after = after & "." & arrAfter(Ubound(arrAfter))
dim strSti ' definer/dimme variabler der skal bruges ' Få fat stien til filen: strSti = left(filnavn, inStr(filnavn, before) - 1)
if inStr(strSti, "\") then ' Der er et "\" i stien, derfor skal den tages med: objFSO.MoveFile strSti & before, strSti & after ' flyt / omdøb else ' Der er ikke noget "\" i stien, derfor skal den ikke med: objFSO.MoveFile before, after ' flyt / omdøb end if else ' denne linie kan fjernes sammen med den næste linie msgbox "Der skal ikke ske nogen ændringer!" end if
Set objFSO = nothing ' destruer objekt for at frigøre hukommelse
else ' Der er ikke angivet noget filnavn: msgbox "Filen '" & WScript.Arguments(0) & "' eksisterer ikke!" end if
Jeg siger TAK for 'kampen' - jeg har sakset programmet. Nu har vores softwarelev. ændret 'noget' som problemet ikke er så stort mere; men jeg gemmer koden til fremtidig formål/inspiration. Point til [thesurfer].
Sådan er det når to uafhængige software produkter skal udveksle filer og de ikke er helt enige om formatet (!)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.