2013-04-22 28 views
26

im cercando di ottenere la directory corrente e usarlo per eseguire un'applicazione, non importa dove il file viene messo e non importa quanto il percorso è cambiatoottenere directory corrente in VBScript

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 

come faccio in realtà costituito questo codice così fa quello che voglio che faccia correttamente? Grazie in anticipo!

risposta

3

La linea

Directory = CurrentDirectory\attribute.exe 

non corrisponde alcuna caratteristica che ho incontrato in un manuale di istruzioni VBScript. Quanto segue funziona per me, anche se non so cosa/dove ti aspetti "attribute.exe" risiedere.

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 
+0

per quella riga 'Directory = CurrentDirectory \ attribute.exe' stavo cercando di impostare una variabile. Immagino che non funzioni. come per questo codice 'WinScriptHost.Run curDir &" \ testme.bat ", 1' ho bisogno di fare ancora il suo lavoro ed eseguire il mio file di applicazione batch senza la finestra di comando. – CodeKeyer

21

Se si vuole costruire un percorso da una variabile e un nome di file, il nome del file deve essere specificato come una stringa (o una variabile contenente una stringa) e sia concatenata con la variabile directory variabile:

Directory = CurrentDirectory & "\attribute.exe" 

o (meglio) si costruisce il percorso utilizzando il metodo BuildPath:

Directory = fso.BuildPath(CurrentDirectory, "attribute.exe") 
+0

non sapevo nemmeno che avresti potuto votare, ma non l'ho messo lì – CodeKeyer

+0

Questa proprietà non è impostata nei miei script. – sirdank

+2

@sirdank Non ho idea di quale proprietà tu stia parlando, poiché non c'è alcun accenno nella mia risposta. Cura di spiegare? –

18

È possibile utilizzare CurrentDirectory proprietà.

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

Nota: restituisce la directory da cui è stato eseguito lo script, non necessariamente la directory dello script stesso. –

+3

Ad esempio, se si trascina un file su un batfile che esegue lo script, il workingdir sarà la directory di quel file. –

21

È possibile utilizzare WScript.ScriptFullName che restituirà il percorso completo del esecuzione dello script.


È quindi possibile utilizzare la manipolazione delle stringhe (jscript esempio):

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


o ricevere aiuto da FileSystemObject, (vbscript esempio):

scriptdir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) 
+1

Il primo esempio richiede una correzione minore: WScript.ScriptFullName.substring (0, WScript.ScriptFullName.lastIndexOf (WScript.ScriptName) - 1) – Greg0ry

+0

Greg0ry grazie, ho modificato la mia risposta –

+0

buon lavoro. questa risposta mi ha aiutato. – Meow

4
'-----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 
+2

Puoi spiegare cosa hai fatto. (Dare a un uomo un pesce - nutrirlo per un giorno, insegnare a un uomo a pescarlo - nutrirlo per tutta la vita.) – Dan

+2

VBScript viene utilizzato in diversi ambienti (ad esempio ASP classico, Windows Scripting Host, HTML Application (tramite IE)). Questo snippet di codice creerà un oggetto "App" con una proprietà "Path". Se si inserisce questo nel proprio script, è possibile utilizzare semplicemente "App.Path" nel codice in modo analogo a quanto si farebbe in VB6. ("Costruisci un uomo e fa caldo per un giorno. Prepara un uomo a fuoco e sarà caloroso per il resto della sua vita.") – sevenfold

-1

semplice :

scriptdir = replace(WScript.ScriptFullName,WScript.ScriptName,"") 
+0

directory corrente <> directory di script; dupl di almeno due 'use ScriptFullName'-answers; pratica peggiore: sostituire invece di .GetParentFolderName(). –

Problemi correlati