2013-04-22 14 views
26

im cố gắng để có được thư mục hiện hành và sử dụng nó để chạy một ứng dụng không có vấn đề mà tập tin được đặt và không có vấn đề như thế nào con đường được thay đổinhận được thư mục hiện tại trong 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 

làm thế nào để thực sự thiết lập mã này để nó làm những gì tôi muốn nó làm một cách chính xác? Cảm ơn bạn trước!

Trả lời

3

dòng của bạn

Directory = CurrentDirectory\attribute.exe 

không phù hợp với bất kỳ tính năng tôi đã gặp trong một sách hướng dẫn VBScript. Các công trình sau đây cho tôi, tho không chắc chắn những gì/nơi bạn mong đợi "attribute.exe" để cư trú.

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

cho dòng đó 'Directory = CurrentDirectory \ attribute.exe' tôi đang cố đặt biến. tôi đoán rằng nó không hoạt động. đối với mã này 'WinScriptHost.Run curDir &" \ testme.bat ", 1' tôi cần nó để vẫn thực hiện công việc của mình và chạy tệp ứng dụng lô của tôi mà không có cửa sổ lệnh. – CodeKeyer

21

Nếu bạn muốn xây dựng một đường đi từ một biến và một tên tập tin, tên tập tin phải được xác định như là một chuỗi (hoặc một biến chứa một chuỗi) và một trong hai nối với biến thư mục biến:

Directory = CurrentDirectory & "\attribute.exe" 

hoặc (tốt hơn) bạn xây dựng con đường bằng cách sử dụng phương pháp BuildPath:

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

thậm chí không biết bạn có thể nhận được phiếu bầu nhưng tôi đã không đặt nó ở đó – CodeKeyer

+0

Thuộc tính này không được đặt trong tập lệnh của tôi. – sirdank

+2

@ sirdank Tôi không biết bạn đang nói về cái gì, vì không có câu hỏi nào trong câu trả lời của tôi. Quan tâm để giải thích? –

18

bạn có thể sử dụng CurrentDirectory tài sản.

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

Lưu ý: Thao tác này sẽ trả về thư mục từ nơi tập lệnh được thực thi, không phải chỉ là thư mục của tập lệnh. –

+3

Ví dụ, nếu bạn kéo thả một tập tin vào một tập tin batfile chạy script, thì workdir sẽ là thư mục của tập tin đó. –

21

Bạn có thể sử dụng WScript.ScriptFullName đó sẽ trở lại đường dẫn đầy đủ của thực hiện kịch bản.


Sau đó bạn có thể sử dụng thao tác chuỗi (JScript dụ):

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


Hoặc có được sự giúp đỡ từ FileSystemObject, (VBScript ví dụ):

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

Ví dụ đầu tiên cần chỉnh sửa nhỏ: WScript.ScriptFullName.substring (0, WScript.ScriptFullName.lastIndexOf (WScript.ScriptName) - 1) – Greg0ry

+0

Greg0ry cảm ơn bạn, ive đã chỉnh sửa phản hồi của tôi –

+0

công việc tốt. câu trả lời này đã giúp tôi. – 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

Bạn có thể giải thích những gì bạn đã làm. (Cho một người đàn ông một con cá - cho anh ta ăn một ngày, dạy một người đàn ông cho cá - nuôi anh ta suốt đời.) – Dan

+2

VBScript được sử dụng trong một số môi trường khác nhau (ví dụ như Classic ASP, Windows Scripting Host, HTML Application (qua IE))). Đoạn mã này sẽ tạo đối tượng "Ứng dụng" với thuộc tính "Đường dẫn". Nếu bạn gắn kết điều này trong kịch bản của bạn, bạn có thể chỉ cần sử dụng "App.Path" trong mã của bạn tương tự như bạn làm trong VB6. ("Xây dựng một người đàn ông lửa, và anh ta sẽ ấm áp trong một ngày. Đặt một người đàn ông trên lửa, và anh ta sẽ được ấm áp cho phần còn lại của cuộc đời mình.") – sevenfold

-1

đơn giản :

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

thư mục hiện tại <> thư mục của kịch bản; dupl của ít nhất hai 'sử dụng ScriptFullName'-câu trả lời; thực hành tồi tệ nhất: Thay thế thay thế .GetParentFolderName(). –