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?
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)
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
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")
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
'-----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
facile:
scriptdir = replace(WScript.ScriptFullName,WScript.ScriptName,"")
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