estoy tratando de obtener el directorio actual y se utiliza para ejecutar una aplicación que no importa a donde el archivo se pone y no importa cómo la ruta se cambia

    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

¿cómo puedo establecer, de hecho, este código para que haga lo que yo quiero hacer correctamente?
Gracias de antemano!

InformationsquelleAutor CodeKeyer | 2013-04-22

7 Comentarios

  1. 38

    Puede utilizar WScript.ScriptFullName, que devuelve la ruta de acceso completa de la ejecutar la secuencia de comandos.

    Puede, a continuación, utilizar la manipulación de cadenas (jscript ejemplo) :

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

    U obtener ayuda de FileSystemObject, (ejemplo de vbscript) :

    scriptdir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
    • El primer ejemplo de la necesidad de hacer una pequeña corrección: WScript.ScriptFullName.substring(0,WScript.ScriptFullName.lastIndexOf(WScript.ScriptName) – 1)
    • Greg0ry gracias, he editado mi respuesta
    • buen trabajo. esta respuesta me ayudó.
  2. 25

    Puede utilizar CurrentDirectory propiedad.

    Dim WshShell, strCurDir
    Set WshShell = CreateObject("WScript.Shell")
    strCurDir    = WshShell.CurrentDirectory
    WshShell.Run strCurDir & "\attribute.exe", 0
    Set WshShell = Nothing
    • Nota: Esto devuelve el directorio desde donde la secuencia de comandos se ejecuta, no necesariamente el directorio de la secuencia de comandos de sí mismo.
    • Por ejemplo, si usted arrastrar y soltar un archivo en un batfile que se ejecuta la secuencia de comandos, a continuación, el workingdir será el directorio de ese archivo.
  3. 23

    Tu problema no es conseguir el directorio (fso.GetAbsolutePathName(".") resuelve el directorio de trabajo actual muy bien). Incluso si usted quería que el directorio de secuencia de comandos en lugar de en el directorio de trabajo actual, usted puede fácilmente determinar que como Jakob Sternberg se describe en su respuesta.

    Lo que no funciona en el código es la construcción de una ruta de acceso del directorio y del archivo ejecutable. Esta es la sintaxis no válida:

    Directory = CurrentDirectory\attribute.exe

    Si quieres construir un camino de una variable y un nombre de archivo, el nombre del archivo debe ser especificado como una cadena (o una variable que contiene una cadena) y se concatena con la variable directorio de variable:

    Directory = CurrentDirectory & "\attribute.exe"

    o (mejor) de construir la ruta usando el BuildPath método:

    Directory = fso.BuildPath(CurrentDirectory, "attribute.exe")
    • incluso no sabía que se podía bajar de los votos pero yo no lo puso ahí
    • Esta propiedad no se establece en mis guiones.
    • No tengo idea de lo que la propiedad que usted está hablando, puesto que no hay ningún mencionado en mi respuesta. Cuidado de explicar?
    • Me disculpo, soy un idiota. Ahora veo de más de un cuidadoso examen de la cuestión de que no estamos sugiriendo que CurrentDirectory es una propiedad global la celebración de la CWD pero que OP es incorrecta la construcción de su camino. Me confundí por rozando la pregunta y la respuesta. Voy a seguir tratando de retraer mi downvote pero por ahora dice que mi voto está bloqueado.
    • Una vez que un voto es bloqueado no se puede retirar hasta que la respuesta está editado de nuevo. Por favor, asegúrese de entender completamente una respuesta antes de emitir su voto en él a partir de ahora.
  4. 5

    Su línea de

    Directory = CurrentDirectory\attribute.exe

    no coincide con ninguna característica que he encontrado en un vbscript manual de instrucciones.
    Las siguientes obras para mí, aunque no estoy seguro de lo que/donde espera «attribute.exe» para residir.

    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
    • para que la línea de Directory = CurrentDirectory\attribute.exe yo estaba tratando de establecer una variable. supongo que no funciona. como para que este código WinScriptHost.Run curDir & "\testme.bat", 1 necesito que todavía hacen su trabajo y ejecutar mi lote de archivos de la aplicación sin la ventana de comandos.
  5. 5
    '-----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
    • Puede usted explicar lo que has hecho. (Dale a un hombre un pescado — alimentarás por un día, enséñale a pescar a un hombre — alimentarás para toda la vida.)
    • VBScript que se usa en diferentes entornos (por ejemplo, ASP Clásico, Windows Scripting Host, HTML de la Aplicación (a través de IE)). Este fragmento de código crea un objeto «App» con un «Camino» de la propiedad. Si te pegan esto en su secuencia de comandos que puede usar simplemente «de la Aplicación.La ruta de acceso» en el código de forma similar a como lo haría en VB6. (Construir un»hombre de fuego, y él va a estar caliente para un día. Conjunto de un hombre en el fuego y estará caliente el resto de su vida.»)
  6. -1

    simple:

    scriptdir = replace(WScript.ScriptFullName,WScript.ScriptName,"")
    • actual directorio <> directorio de secuencia de comandos; dupl de al menos dos ‘uso ScriptFullName’-respuestas; peor práctica: Reemplazar en lugar de .GetParentFolderName().

Dejar respuesta

Please enter your comment!
Please enter your name here