web-dev-qa-db-fra.com

Obtenir le répertoire actuel dans VBScript

J'essaie d'obtenir le répertoire actuel et de l'utiliser pour exécuter une application, peu importe où le fichier est placé et quelle que soit la modification du chemin.

Dim fso: set fso = CreateObject("Scripting.FileSystemObject")
Dim CurrentDirectory
CurrentDirectory = fso.GetAbsolutePathName(".")
Dim Directory
Directory = CurrentDirectory\attribute.exe

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "Directory" & Chr(34), 0
Set WinScriptHost = Nothing

Comment puis-je configurer ce code afin qu'il fasse ce que je veux qu'il fasse correctement?

37
CodeKeyer

Vous pouvez utiliser WScript.ScriptFullName qui renverra le chemin complet du script d'exécution .


Vous pouvez ensuite utiliser la manipulation de chaîne (, exemple jscript ):

scriptdir = WScript.ScriptFullName.substring(0,WScript.ScriptFullName.lastIndexOf(WScript.ScriptName)-1)


Ou obtenez l’aide de FileSystemObject, (, exemple vbscript ):

scriptdir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
39
Jakob Sternberg

Vous pouvez utiliser la propriété CurrentDirectory .

Dim WshShell, strCurDir
Set WshShell = CreateObject("WScript.Shell")
strCurDir    = WshShell.CurrentDirectory
WshShell.Run strCurDir & "\attribute.exe", 0
Set WshShell = Nothing
27

Votre problème n’obtient pas le répertoire (fso.GetAbsolutePathName(".") résout très bien le répertoire de travail en cours). Même si vous vouliez le répertoire de script au lieu du répertoire de travail actuel, vous pouvez facilement le déterminer comme décrit par Jakob Sternberg dans sa réponse .

Ce qui ne fonctionne pas dans votre code est la construction d’un chemin à partir du répertoire et de votre exécutable. Ceci est une syntaxe invalide:

Directory = CurrentDirectory\attribute.exe

Si vous souhaitez créer un chemin à partir d'une variable et d'un nom de fichier, vous devez spécifier le nom du fichier sous la forme d'une chaîne (ou d'une variable contenant une chaîne) et le concaténer avec la variable de répertoire variable:

Directory = CurrentDirectory & "\attribute.exe"

ou (mieux) vous construisez le chemin en utilisant la méthode BuildPath :

Directory = fso.BuildPath(CurrentDirectory, "attribute.exe")
24
Ansgar Wiechers

Votre ligne

Directory = CurrentDirectory\attribute.exe

ne correspond à aucune fonctionnalité rencontrée dans un manuel d'instruction vbscript. Ce qui suit fonctionne pour moi, bien que vous ne sachiez pas ce que/où vous attendez que "attribut.exe" réside.

dim fso
dim curDir
dim WinScriptHost
set fso = CreateObject("Scripting.FileSystemObject")
curDir = fso.GetAbsolutePathName(".")
set fso = nothing
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run curDir & "\testme.bat", 1
set WinScriptHost = nothing
6
Les Ferguson
'-----Implementation of VB6 App object in VBScript-----
Class clsApplication
    Property Get Path()
          Dim sTmp
          If IsObject(Server) Then
               'Classic ASP
               Path = Server.MapPath("../")
          ElseIf IsObject(WScript) Then 
               'Windows Scripting Host
               Path = Left(WScript.ScriptFullName, InStr(WScript.ScriptFullName, WScript.ScriptName) - 2)
          ElseIf IsObject(window) Then
               'Internet Explorer HTML Application (HTA)
               sTmp = Replace( Replace(Unescape(window.location), "file:///", "") ,"/", "\")
               Path = Left(sTmp, InstrRev( sTmp , "\") - 1)
          End If
    End Property
End Class
Dim App : Set App = New clsApplication 'use as App.Path
6
sevenfold

facile:

scriptdir = replace(WScript.ScriptFullName,WScript.ScriptName,"")
1
user3063731

Utiliser avec… Terminer avec une déclaration

Exemple avec… End With Statement

''''Way 1
currentdir=Left(WScript.ScriptFullName,InStrRev(WScript.ScriptFullName,"\"))


''''Way 2

With CreateObject("WScript.Shell")
CurrentPath=.CurrentDirectory
End With


''''Way 3

With WSH
CurrentDirr=Replace(.ScriptFullName,.ScriptName,"")
End With
1
scientist_7