Du kan inte flytta en fil till samma plats med MoveFile.
Försök med egenskapen Name istället...
'[blue]i loopen[/blue]
File.Name = strNewFileName
10 svar · 410 visningar · startad av Dr-man
Jag problem med följande kod.
Med denna kod försöker jag ta en "rename" på en viss mapp och dess undermappar, så att filnamnet får småa bokstäver.
Men jag får följande felmeddelande:
Objekt krävs.: 'Server'
Är det nån som kan hjälpa?
Set objFS = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder(strDir)
For Each File In objFolder.Files
'Byt namn
strNewFileName = LCase(File.Name)
objFS.MoveFile File.Name, strNewFileName
Next
Set objFile = Nothing
Set objFolder = Nothing
Set objFS = Nothing
Du kan inte flytta en fil till samma plats med MoveFile.
Försök med egenskapen Name istället...
'[blue]i loopen[/blue]
File.Name = strNewFileName
Om det är VBScript utan asp, så ska du droppa Server.
Jag får fortfarande felmeddelanden!
Felmeddelandet är: Filen finns redan!
strDir = "d:\test2"
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder(strDir)
For Each File In objFolder.Files
strNewFileName = LCase(File.Name)
File.Name = strNewFileName
objFS.MoveFile File.Name, strNewFileName
Next
Set objFile = Nothing
Set objFolder = Nothing
Set objFS = Nothing
Du kanske skulle kunna göra så här?
strDir = "d:\test2"
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder(strDir)
For Each File In objFolder.Files
objFS.CopyFile "d:\test2\" & File.Name, "d:\test2\" & LCase(File.Name), True
Next
Set objFile = Nothing
Set objFolder = Nothing
Set objFS = Nothing
Yeah! 1000 inlägg! :e
Hörde av Solis att min förra kod inte funkar, så jag försöker igen, hoppas att det inte blir samma fel som du har fått innan. :)
strDir = "d:\test2"
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder(strDir)
For Each File In objFolder.Files
Set objFile = objFS.GetFile("d:\test2\" & File.Name)
objFile.Name = LCase(File.Name)
Next
Set objFile = Nothing
Set objFile = Nothing
Set objFolder = Nothing
Set objFS = Nothing
Jag får det inte ännu heller att fungera!
Felmeddelandet är: Filen finns redan.
Det är på rad 7, som den klagar på.
skumt...
MSDN skrev:
Name Property
Sets or returns the name of a specified file or folder. Read/write.object.Name [= newname]
Arguments
object
Required. Always the name of a File or Folder object.
newname
Optional. If provided, newname is the new name of the specified object.
strDir = "d:\test2"
Set fsoFile = CreateObject("Scripting.FileSystemObject")
Set fsoDir = fsoFile.GetFolder(strDir)
For Each objFile In fsoDir.Files
objFile.Name = LCase(objFile.Name)
Next
Set fsoFile = Nothing
Set fsoDir = Nothing
Det borde ju faktiskt fungera. En annan metod är att först kopiera filen och sätta ett nytt namn på den typ LCase(File.Name) & ".new". Sedan tar man bort orginalet med Delete. Sedan kopierar du kopian och sätter namnet till Left(File.Name, Len(File.Name) - 4). Sedan tar man bort första kopian.
Ett förslag på lösning enligt Engine^s och solbulles modell:
TemporaryFolder=2
Sub MakeLCase(fld)
Set objFolder= objFS.GetFolder(fld)
For Each File In objFolder.Files
lCaseName=LCase(File.Name)
if File.Name<> lCaseName then
tmpName=objFS.GetTempName()
objFS.CopyFile File.Path, fldTemp & "\" & tmpName, true
objFS.DeleteFile File, true
objFS.MoveFile fldTemp & "\" & tmpName, objFolder.Path & "\" & lCaseName
end if
Next
For Each subFld in objFolder.SubFolders
MakeLCase subFld.Path
next
end sub
Set objFS = CreateObject("Scripting.FileSystemObject")
Set fldTemp= objFS.GetSpecialFolder(TemporaryFolder)
MakeLCase "."
Används på egen risk och kan förmodligen behöva justeringar.