2010-10-19 22 views
2

J'essaye d'obtenir le chemin d'un fichier qui est dans un sous-répertoire du répertoire courant dans VBScript. Ce qui suit ne semble pas fonctionner?VBScript répertoire actuel + sous-répertoire?

currentDirectory = left(WScript.ScriptFullName,(Len(WScript.ScriptFullName))-(len(WScript.ScriptName))) 
FileToCopy = currentDirectory & "\test\user.js" 

Voici le code entier:

Set oFSO = CreateObject("Scripting.FileSystemObject") 
strFolder = oFSO.GetParentFolderName(WScript.ScriptFullName) 
FileToCopy = oFSO.BuildPath(strFolder, "unproxy\user.js") 

''# get AppdataPath 
Set WshShell = CreateObject("WScript.Shell") 
Set WshSysEnv = WshShell.Environment("PROCESS") 

AppdataPath = WshSysEnv("APPDATA") 

FoxProfilePath = AppdataPath & "\Mozilla\Firefox\Profiles\" 

'"# is firefox and user.js present? 
if oFSO.FolderExists(FoxProfilePath) AND oFSO.FileExists(FileToCopy) Then 

''# copy user.js in all profilefolders to get around those random profile names =) 
    For Each ProfileFolder In oFSO.GetFolder(FoxProfilePath).Subfolders 
     oFSO.GetFile(FileToCopy).Copy ProfileFolder & "\" & FileToCopy, True 
    Next 
End If 

'"# clean up 
Set oFSO = Nothing 
Set WshShell = Nothing 
Set WshSysEnv = Nothing 
+0

Pouvez-vous préciser ce que vous entendez par "ne semble pas fonctionner"? Avez-vous une erreur ou un résultat incorrect? Et quel est le nom de fichier de votre script VBScript? – Helen

+0

Je ne reçois pas d'erreur, rien ne semble se produire - le fichier ne copie pas parce que je devine qu'il n'est pas capable de localiser le fichier user.js. – Romulus

+0

Le nom de fichier est copyFile.vbs – Romulus

Répondre

3

Je recommande d'utiliser FileSystemObject lorsqu'ils traitent avec des chemins de fichiers:

Set oFSO = CreateObject("Scripting.FileSystemObject") 
strFolder = oFSO.GetParentFolderName(WScript.ScriptFullName) 
FileToCopy = oFSO.BuildPath(strFolder, "test\user.js") 

Edit: Le problème est dans cette ligne de votre script:

oFSO.GetFile(FileToCopy).Copy ProfileFolder & "\" & FileToCopy, True 

Depuis FileToCopy contient un nom de fichier complet, lorsque vous concaténer avec ProfileFolder vous obtenez un nom de fichier non valide, comme ceci:

C: \ Documents and Settings \ nom d'utilisateur \ Application Data \ Mozilla \ Firefox \ Profiles \ mlreq6kv.default \ D: \ unproxy \ user.js

Modifiez cette ligne à celle ci-dessous, et votre script devrait fonctionner correctement. (Note: le séparateur de chemin de fuite à la fin de ProfileFolder est nécessaire pour indiquer que le dossier de profil, par exemple mlreq6kv.default, est en effet un dossier et non un fichier.)

oFSO.GetFile(FileToCopy).Copy ProfileFolder & "\", True 
+0

Cela me donne une erreur "Nom ou numéro de fichier incorrect" ... – Romulus

1

Vous pouvez obtenir le courant répertoire avec:

Set WSHShell = WScript.CreateObject("WScript.Shell") 
WScript.Echo WshShell.CurrentDirectory