Jag undrar hur man gör för att flytta filer till en icke skapad sökväg. Jag får det att fungera om jag bara har en ny katalog i den nya sökvägen men om jag har flera så får jag...
Microsoft VBScript runtime error '800a0005'
Invalid procedure call or argument
Behöver man manuellt loopa och skapa katalogerna i den nya sökvägen eller ska "objFso.MoveFolder" klara av att skapa katalogstrukturen i den nya sökvägen?
Jag använder mig av följande kod...
set objFso = CreateObject("Scripting.FileSystemObject")
response.write("<li> Flyttar katalogen från " &server.mappath(sRelativeFolderPath_current) &" till " & server.mappath(sRelativeFolderPath))
objFso.MoveFolder server.mappath(sRelativeFolderPath_current), server.mappath(sRelativeFolderPath)
När sRelativeFolderPath_current = D:\fileroot\photos\2007
och sRelativeFolderPath = D:\fileroot\photos\2007\test\
så fungerar det, men inte när
sRelativeFolderPath_current = D:\fileroot\photos\2007
och sRelativeFolderPath = D:\fileroot\photos\2007\test\test2\test3\
Om inte jag är helt vimsig i skallen så är det både teoretiskt och fysiskt omöjligt att flytta en mapp till en undermapp på det viset. Det kan du inte heller göra i windows.
Du får dela upp i flera steg:
1. Flytta filer: D:\fileroot\photos\2007 -> D:\fileroot\photos\_2007\test\test2\test3
2. Flytta igen: D:\fileroot\photos\_2007 -> D:\fileroot\photos\2007
Då kommer nya mappen 2007 att innehålla testmapparna. :)
Det går faktiskt alldeles utmärkt att skapa mappar på det sättet. Jag har dock inte provat att flytta filer i CMD på länge men då det fungerar att skapa mappar +undermappar +undermappar med...
mkdir "test1\test2\test3"
så borde det vara möjligt att även move kunde det tycker jag. Skulle vara trevligt om vbscripts moveFolder fungerade likadant. Varför nöja sig med att bara skapa en katalog när all data finns för att skapa alla ?¿
Men det är min åsikt... den stämmer inte alltid med giltig syntax *ler*
Mm, fast mkdir eller skapa mapp, det är inte samma sak som att flytta.
Testa detta så får du se:
1. Skapa en ny mapp på ditt skrivbord
2. Skapa en till mapp i den mappen.
3. Prova att flytta första mappen in i den andra!
Som i ditt fall så vill du ju flytta 2007 in i sig själv!
Jag förstår hur du tänker. Man kan inte radera grenen man sitter på :)
Men det är inte igentligen det jag vill göra. Jag vill igentligen kunna kopiera kataloger och filer till en sökväg där sökvägen består av flera ickeskapade kataloger.
Nu har jag skapat en egen funktion som klarar att flytta filer till en icke ännu existerande sökväg som är mer än en katalog djup. Antar att det är någon fiffig programmerare som kommer på någon bättre metod än nedan men detta duger för mig. Tycker fortfarande att allt i min funktion kunde vara inbakat i MoveFile och CopyFile.
<% function funMoveOrCopyFiles(iCopyOrMove, iRelativeFrom, iRelativeTo)
'1) - CREATE FILE SYSTEM OBJECT...
Set objFso = CreateObject("Scripting.FileSystemObject")
'2) - VERIFY THAT FROM TO ADDRESS IS A RELATIVE PATH...
if instr(iRelativeFrom,"\") = 1 then
'response.write("<li> iRelativeFrom = " &iRelativeFrom)
else
varError = "<li><font color=red>ERROR. The FROM path must start with \</font>"
end if
'2) - VERIFY THAT THE TO ADDRESS IS A RELATIVE PATH...
if instr(iRelativeTo,"\") = 1 then
iRelativeTo = right(iRelativeTo,len(iRelativeTo)-1)
'response.write("<li> iRelativeTo = " &iRelativeTo)
else
varError = "<li><font color=red>ERROR. The TO path must start with \</font>"
end if
'3) - GET A LIST OFF ALL TARGET FOLDERS...
myArray = Split(iRelativeTo,"\")
'4) - LOOP THROUGH ALL FOLDERS AND TEST IF THEY EXIST. IF NOT, CREATE THEM.
for i = lBound(myArray) to uBound(myArray)
'4.1) - SKIP FILENAME...
if inStr(myArray(i),".") <= 0 AND varError = "" then
iRelativeToFolder = iRelativeToFolder &"\" &myArray(i)
if objFso.FolderExists(server.mappath(iRelativeToFolder)) Then
'Folder allready exist. Skip it or do something cool below...
else
'4.2) - CREATE FOLDER...
objFSO.CreateFolder(server.mappath(iRelativeToFolder))
end if
end if
next
'4) - COPY THE FILE...
if varError = "" then
if lCase(iCopyOrMove) = "move" then
'response.write("<p><li>MOVE " &server.mappath(iRelativeFrom) &" , " &server.mappath("\" &iRelativeTo))
call objFSO.MoveFile(server.mappath(iRelativeFrom),server.mappath("\" &iRelativeTo))
elseif lCase(iCopyOrMove) = "copy" then
'response.write("<p><li>COPY " &server.mappath(iRelativeFrom) &" , " &server.mappath("\" &iRelativeTo))
call objFSO.CopyFile(server.mappath(iRelativeFrom),server.mappath("\" &iRelativeTo))
else
varError = varError &"<font color=red> Incorrect input. Syntax = call funAddFolderAndSubfolders(""copy"", ""relativeFromPath"", ""relativeToPath"") "
end if
end if
'5) - OUTPUT ANY ERRORS...
response.write(varError)
end function %>
En variant som även klarar av att flytta / kopiera kataloger. Hyffsat snälla felmeddelanden...
<% function funMoveOrCopy(iCopyOrMove, iRelativeFrom, iRelativeTo)
'response.write("<li> iRelativeFrom = " &iRelativeFrom)
'1) - CREATE FILE SYSTEM OBJECT...
Set objFso = CreateObject("Scripting.FileSystemObject")
'2) - VERIFY THAT FROM ADDRESS IS A RELATIVE PATH...
if instr(iRelativeFrom,"\") = 1 then
'response.write("<li> iRelativeFrom = " &iRelativeFrom)
else
varError = varError &"<p>ERROR! The FROM path must start with \"
end if
'3) - VERIFY THAT THE TO ADDRESS IS A RELATIVE PATH...
if instr(iRelativeTo,"\") = 1 then
iRelativeTo = right(iRelativeTo,len(iRelativeTo)-1)
'response.write("<li> iRelativeTo = " &iRelativeTo)
else
varError = varError &"<p>ERROR! The TO path must start with \"
end if
'4) - TEST IF IT IS A FOLDER OR A FILE THAT NEEDS TO BE HANDLED...
if inStr(iRelativeFrom,".") = 0 or inStr(iRelativeFrom,".") = 0 then
varTargetIs = "Folder"
else
varTargetIs = "File"
end if
'response.write("<p><li> varTargetIs = " &varTargetIs)
'5) - VERIFY THAT THE FROM PATH EXISTS...
if varTargetIs = "Folder" then
if not objFso.FolderExists(server.mappath(iRelativeFrom)) Then
varError = varError &"<p>ERROR! The FROM path is not found: " &server.mappath(iRelativeFrom) &" Please check that it's correct..."
end if
else
if not objFso.FileExists(server.mappath(iRelativeFrom)) Then
varError = varError &"<p>The FROM path is not found: " &server.mappath(iRelativeFrom) &" Please check that it's correct..."
end if
end if
'6) - GET A LIST OFF ALL TARGET FOLDERS...
myArray = Split(iRelativeTo,"\")
'7) - LOOP THROUGH ALL FOLDERS AND TEST IF THEY EXIST. IF NOT, CREATE THEM.
for i = lBound(myArray) to uBound(myArray)
'7.1) - SKIP FILENAMES...
if inStr(myArray(i),".") <= 0 AND varError = "" then
iRelativeToFolder = iRelativeToFolder &"\" &myArray(i)
if objFso.FolderExists(server.mappath(iRelativeToFolder)) Then
'Folder allready exist. Skip it or do something cool below...
else
'7.2) - CREATE FOLDER...
response.write("<br><li> Create folder " &server.mappath(iRelativeToFolder))
objFSO.CreateFolder(server.mappath(iRelativeToFolder))
end if
end if
next
'8) - MOVE or COPY THE FILE...
if varTargetIs = "File" and varError = "" then
if lCase(iCopyOrMove) = "move" then
'response.write("<p><li>MOVE FILE " &server.mappath(iRelativeFrom) &" , " &server.mappath("\" &iRelativeTo))
call objFSO.MoveFile(server.mappath(iRelativeFrom),server.mappath("\" &iRelativeTo))
elseif lCase(iCopyOrMove) = "copy" then
'response.write("<p><li>COPY FILE " &server.mappath(iRelativeFrom) &" , " &server.mappath("\" &iRelativeTo))
call objFSO.CopyFile(server.mappath(iRelativeFrom),server.mappath("\" &iRelativeTo))
else
varError = varError &"<p>ERROR! Incorrect input. Syntax = call funAddFolderAndSubfolders(""copy"", ""relativeFromPath"", ""relativeToPath"") "
end if
end if
'9) - MOVE or COPY THE FOLDER...
if varTargetIs = "Folder" and varError = "" then
'9.1 - DETECT IF WE SHOULD COPY THE FOLDER OR ONLY ITS CONTENTS...
varCutLength = len(iRelativeFrom) - inStrRev(iRelativeFrom,"\")
varHandleThisItem = right(iRelativeFrom, varCutLength)
'If no \ exist on the end of the string then we want to copy the folder and not only its contents
if len(varHandleThisItem) > 0 then
iRelativeTo = iRelativeTo &varHandleThisItem
end if
'9.2) -
'Action...
if lCase(iCopyOrMove) = "move" then
'response.write("<p><li>MOVE FOLDER " &server.mappath(iRelativeFrom) &" , " &server.mappath("\" &iRelativeTo))
call objFSO.CopyFolder(server.mappath(iRelativeFrom),server.mappath("\" &iRelativeTo))
objFSO.DeleteFolder server.mappath(iRelativeFrom), TRUE
elseif lCase(iCopyOrMove) = "copy" then
'response.write("<p><li>COPY FOLDER " &server.mappath(iRelativeFrom) &" , " &server.mappath("\" &iRelativeTo))
call objFSO.CopyFolder(server.mappath(iRelativeFrom),server.mappath("\" &iRelativeTo))
else
varError = varError &"<p>ERROR! Incorrect input. Syntax = call funAddFolderAndSubfolders(""copy"", ""relativeFromPath"", ""relativeToPath"") "
end if
end if
'10) - OUTPUT ANY ERRORS...
if varError <> "" then %>
<font face="tahoma" size="1">
<font color="red"><b><%=varError%></b></font><p>
<u>Instructions:</u><br>
Syntax examples:
<li> <b>call funMoveOrCopy("[move] [copy]", "[from path]", "[to path]")</b><br>
<li> <b>call funMoveOrCopy("Copy", "\folderA\folderB", "\folderX\")</b><br>
This will copy the folder 'folderB' and all subfolders and files to "\folderX\folderB\". Note that the first path has a missing \ at the end.
<li> <b>call funMoveOrCopy("Copy", "\folderA\folderB\", "\folderX\")</b> <br>
This will copy all subfolders and files in folderB to "\folderX\".
<li> <b>call funMoveOrCopy("Move", "\folderA\folderB\mypic.gif", "\folderX\mypic.gif") </b><br>
This will move the file from A to B.
<li> <b>call funMoveOrCopy("Move", "\folderA\folderB\mypic.gif", "\folderX\folder1\folder2\folder3\mypic.gif") </b><br>
This is normally not possible with a single MoveFile syntax but is allowed in this function. If is allowed
to enter a target path that is not yet created. Any missing folders will be created without any notice.
<li> <b>call funMoveOrCopy("Move", "\folderA\folderB\mypic.gif", "\folderA\folderB\mypicNEW.gif") </b><br>
This will rename the mypic.gif file to mypicNEW.gif
</font>
<% end if
end function %>
292 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e