Avatar billede majsmarken Nybegynder
05. januar 2004 - 14:56 Der 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.
Avatar billede thesurfer Nybegynder
05. januar 2004 - 15:23 #1
Hvordan henter du filnavnet?
Hvad med?:

str = "Sørens Æblegård"
str = replace(str, "ø", "oe")
str = replace(str, "Æ", "ae")
' og de andre bogstaver.. husk små og store bogstaver..
msgbox str
Avatar billede majsmarken Nybegynder
05. januar 2004 - 15:40 #2
Tanken var at blive kaldt på kommandolinien.

XXX.VBS "Sørens Æblegård.avi"

giver ændring af "Sørens Æblegård.avi" til
S_rens__bleg_rd.avi  eller  Srenblegrd.avi
eller din idé
Soerens_Aeblegaard.avi
Avatar billede thesurfer Nybegynder
05. januar 2004 - 15:50 #3
Du skal så have fat på Arguments(0):
f.eks.:

filnavn = WScript.Arguments(0)
filnavn = replace(filnavn, "æ", "ae")
msgbox filnavn ' så man kan se svaret..

Jeg prøver lige at finde noget med WScript.Arguments..
Avatar billede thesurfer Nybegynder
05. januar 2004 - 15:56 #4
Testet og virker:

' 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..

msgbox "filnavn: " & filnavn
Avatar billede majsmarken Nybegynder
05. januar 2004 - 16:07 #5
Jeg ka' godt se (=læse) fidusen med

filnavn = replace(filnavn, "Æ", "ae")

Jeg har pt. ikke så meget "kørekort" til VBS (endnu) så hvordan bliver det fulde program... med hoved og hale...
Avatar billede thesurfer Nybegynder
05. januar 2004 - 16:23 #6
Hele scriptet:

' 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

msgbox "Filnavn: " & filnavn & vbCrLf & "Nyt filnavn: " & nyt_filnavn
Avatar billede thesurfer Nybegynder
05. januar 2004 - 16:26 #7
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

msgbox "Filnavn: " & filnavn & vbCrLf & "Nyt filnavn: " & nyt_filnavn
else

msgbox "Filnavn mangler!!"
end if
Avatar billede majsmarken Nybegynder
06. januar 2004 - 19:42 #8
<thesurfer>:
Jeps - det ser rigtigt ud... Godt du skriver 'comments - det kunne mange lære af...

MEN: Du kender udtrykket 'at stikke lillefinder og få taget hele armen'.

Ved at slå op i diverse tidligere (fejl)hændelser er der også denne kombination:

Filnavn:
    Hr. Hansen.avi
... og så tror det efterfølgende system at extension er [. Hansen] og ikke retteligt [.avi]

Altså slette dette [.] i filnavnet undtagen i .avi ???

Hmmm...
Avatar billede thesurfer Nybegynder
06. januar 2004 - 22:54 #9
Det vil sige at "Hr. Hansen.avi" bliver til "Hr Hansen.avi"?
Avatar billede majsmarken Nybegynder
06. januar 2004 - 23:17 #10
Jeps - det er 'ønsket'.
Og hvis man bare bruger 'replace' så bliver [.] i .avi jo også ædt...

Vorst case kunne også være [Hr. Henrik B..avi].
Avatar billede thesurfer Nybegynder
06. januar 2004 - 23:18 #11
Yeps.. kigger lige på det..
Avatar billede thesurfer Nybegynder
06. januar 2004 - 23:21 #12
Prøv lige det her:


' 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

nyt_filnavn = tmp & "." & arrNavn(UBound(arrNavn))

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

msgbox "Filnavn: " & filnavn & vbCrLf & "Nyt filnavn: " & nyt_filnavn
else

msgbox "Filnavn mangler!!"
end if
Avatar billede thesurfer Nybegynder
06. januar 2004 - 23:23 #13
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..
Avatar billede thesurfer Nybegynder
07. januar 2004 - 00:54 #14
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

else

msgbox "Filnavn mangler!!"
end if
Avatar billede bfjmnemonic Nybegynder
23. januar 2004 - 13:23 #15
Kunne det ikke være en ide, at check om filnavnet overhovedet er ændret inden man Mover det til det nye navn?
Avatar billede thesurfer Nybegynder
24. januar 2004 - 18:03 #16
huh? Han kan vel se om der er "æ, ø, å" i filnavnet, når han slipper den over vbs filen.. eller selv skriver:
WScript XXX.VBS "FILNAVN-HER"
Avatar billede bfjmnemonic Nybegynder
25. januar 2004 - 10:34 #17
Tja, men det er ikke noget særlig omfattende check, og så ville den nemmere kunne bruges i et script. Lidt mere automatiseret.
Avatar billede majsmarken Nybegynder
25. januar 2004 - 11:15 #18
<thesurfer>: Jeg skal nok komme tilbage med 'feedback' - jeg er lige 'arbejdsramt' i anden forbindelse...
Avatar billede thesurfer Nybegynder
25. januar 2004 - 16:22 #19
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

else

msgbox "Filnavn mangler!!"
end if
Avatar billede thesurfer Nybegynder
25. januar 2004 - 16:44 #20
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

else

msgbox "Filnavn mangler!!"
end if
Avatar billede thesurfer Nybegynder
25. januar 2004 - 16:46 #21
Der burde nok have stået:

' Format (uden mellemrum eller andre tegn!):
' gammelt_tegn,erstattes_med,gammelt_tegn,erstattes_med osv:

Eller noget i den stil.. men I forstår nok hvad jeg mener.. :)
Ellers må I spørge..
Avatar billede majsmarken Nybegynder
28. januar 2004 - 07:14 #22
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 (!)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester