Je suis en train de boucler un dossier rempli de fichiers .html et d'ajouter du code au début des fichiers (bien que j'obtiens une ligne non désirée interruptions avant le code que j'insère) et aussi pour saisir le contenu de la balise <title>
et l'utiliser pour renommer chaque fichier.Obtention du nom ou du numéro de fichier incorrect lors de la modification du nom du fichier de destination
Je remplace les espaces et les caractères indésirables avec -Bois
Tout cela fonctionne, mais je tente aussi de renommer le fichier existant (Default0010.html
est un exemple) au texte de la <title>
.
Cela fonctionne aussi mais quand j'essaie de déplacer le fichier existant dans le nouveau fichier, j'obtiens un Bad File name or Number
mais quand j'explique explicitement le nom du fichier de destination à une chaîne simple cela fonctionne.
Cela me fait penser que ma chaîne n'est pas propre ou que vous ne pouvez pas utiliser une variable pour la destination. Veuillez également ignorer les lignes Dim i
, i = i + 1
et If i=1 Then Exit For
.
Ceci a été ajouté pendant que je testais le script puis quand j'étais content qu'il fasse ce que je voulais, je le courrais sur tous les fichiers HTML.
Set objFso = CreateObject("Scripting.FileSystemObject")
Set Folder = objFSO.GetFolder("C:\My Web Sites\test\www.test.org.uk\html")
Dim i
Dim ObjFsoFile
Dim ObjFile
Dim StrData
Dim StrTitleTag
Dim OldFilename
Dim NewFilename
Set ObjFsoFile = CreateObject("Scripting.FileSystemObject")
'Loop all of the files
For Each File In Folder.Files
'Get contents of the file and store in a string
'Opening the file in READ mode
Set ObjFile = ObjFsoFile.OpenTextFile(File.Name)
'Reading from the file
StrData = ObjFile.ReadAll
'Add the Perch include to the beginning
StrData = replace(StrData,"<?php include('cms/runtime.php');?>","") 'Remove the Perch include in-case we are re-running this
StrData = replace(StrData,"<!DOCTYPE HTML PUBLIC " & Chr(34) & "-//W3C//DTD HTML 4.0 Transitional//EN" & Chr(34) & ">","<?php include('cms/runtime.php');?>" & vbcrlf & "<!DOCTYPE HTML PUBLIC " & Chr(34) & "-//W3C//DTD HTML 4.0 Transitional//EN" & Chr(34) & ">")
'Msgbox StrData
'Closing the file
ObjFile.Close
'Write the changes to the current file
Set objFile = objFSO.CreateTextFile(File.Name,True)
objFile.Write StrData
objFile.Close
'Re-write the contents of the current file and replace with the StrData Above
'Grab the contents between <title> and </title>
parse_string1 = StrData 'see above post
parse_string1 = replace(parse_string1,"<title>","¦")
parse_string = split(parse_string1,"¦")
parse = parse_string(1)
parse_string1 = replace(parse,"</title>","¦")
parse_string = split(parse_string1,"¦")
parsed_string = parse_string(0)
StrTitleTag = parsed_string 'gives final result
'Save old filename of current file to a string
OldFilename = File.Name
'Msgbox OldFilename
'Rename current file to the above contents of between <title> and </title>
'Replace spaces with - characters in the filename.
Dim divider
divider = "-"
'Replace & with and
NewFilename = Replace((StrTitleTag & ".php"),"&","and")
'Replace triple space with single space
NewFilename = Replace(NewFilename," "," ")
'Replace double space with single space
NewFilename = Replace(NewFilename," "," ")
'Replace - with space
NewFilename = Replace(NewFilename," ",divider)
'Replace ---- with -
NewFilename = Replace(NewFilename,divider & "-" & divider,divider)
'Replace ---- with -
NewFilename = Replace(NewFilename,divider & divider & divider,divider)
'Replace ,- with -
NewFilename = Replace(NewFilename,"," & divider,divider)
'Replace LineBreaks with nothing (remove line breaks)
NewFilename = Replace(NewFilename,vbCrLf,"")
NewFilename = Replace(NewFilename,vbLf,"")
NewFilename = Replace(NewFilename,vbCr,"")
NewFilename = LCase(NewFilename)
'Msgbox NewFilename
'Loop through all files
For Each File2 In Folder.Files
'Opening the file in READ mode
Set ObjFile = ObjFsoFile.OpenTextFile(File2.Name)
'Get contents of the file and store in a string
'Reading from the file
StrData = ObjFile.ReadAll
'Closing the file
ObjFile.Close
'Replace all occurences of the old filename with the new filename
StrData = Replace(StrData, OldFilename, NewFilename)
'How to write file
Set objFile = objFSO.CreateTextFile(File2.Name,True)
objFile.Write StrData
objFile.Close
Next
'Rename Old file with the new filename
If objFso.FileExists("C:\My Web Sites\test\www.test.org.uk\html\" & OldFilename) Then
'NewFileName = "test.php"
'NewFileName = "test-test-test-test-test-test-test-test-test.php"
Msgbox "Renaming the file " & OldFilename & " (Length: " & Len(OldFilename) & ") with the following name: " & NewFilename & " (Length: " & Len(NewFilename) & ")"
Msgbox "Compare: test-test-test-test-test-test-test-test-test.php " & NewFilename
objFso.MoveFile "C:\My Web Sites\test\www.test.org.uk\html\" & OldFilename, "C:\My Web Sites\test\www.test.org.uk\html\" & NewFileName
End If
i = i + 1
If i=1 Then Exit For
Next
Cela semble très bien et j'essaie vos suggestions maintenant, une fois que je suis heureux avec eux, je vais vous donner une belle grosse coche verte! Mais aussi s'il vous plaît noter que j'ai oublié de mentionner que je dois parcourir tout le fichier et remplacer les liens hypertexte avec le nouveaufichier (cela mettra à jour tous les liens sur le site à la nouvelle page) –
Je reçois maintenant l'objet ne supporte pas cette propriété ou méthode: Code 800A01B6 ''Renommer l'ancien fichier avec le nouveau nom de fichier' ' Si objFso.FileExists ("C: \ Mes sites Web \ Dodderhill \ www.dodderhillhistory.org.uk \ html \" & OldFilename) Then' ' Set objFile = ObjFsoFile.OpenTextFile (File.Name) '' objFile.Name = NewFilename' ' 'Fermeture du fichier' ' 'ObjFile.Close' Fin If' –
Vous avez' objFile' un [flux de texte] (http://msdn.microsoft.objet com/en-us/library/312a5kbt), pas un objet [File] (http://msdn.microsoft.com/en-us/library/1ft05taf). Seuls les derniers ont une propriété 'Name'. Et il a déjà été noté que vous mettez à jour les liens dans vos fichiers. Donc, ma remarque que le code simplifié n'incluait pas ces parties (IOW, vous auriez besoin de les ajouter à nouveau). Ils ont été omis de l'exemple de code pour garder l'exemple simple. –