2011-09-23 69 views
1

是否有可能使用.vbs中的路径变量。我的基本情况是我有一个vbs脚本,经常在一台计算机上运行,​​一个人登录并由一个完全不同用户名的管理员运行(假设该文件将被右键单击并“运行”)。在.vbs中使用文件路径中的变量

该脚本编辑位于登录用户的用户目录中的ini文件。我知道在批处理中,我可以简单地插入变量"C:\Users\%Logger%\AppData\Local\stat.ini"并且变量将被替换。但我无法在.vbs中做到这一点。我的脚本到目前为止。或者在答案here中查看它的大部分内容。

Dim blnRes: blnRes = 0 
Dim strOld, strNew, logger 
strOld = "frogg" 
strNew = "frog" 
logger = Inputbox("What is your Domain ID exactly as entered when you log into this machine?","Domain ID") 

On Error Resume Next 
Call update("C:\Users\logger\AppData\Local\stat.ini", strOld, strNew) 
blnRes = blnRes Or (Err.Number = 0): Err.Clear 

有没有作为一个变量一些方法,我可以标记logger,或有更简单的方式来做到这一点?

回答

2

如果我理解你正确地后在做什么,你要么去的地方你创建像"string part 1" & logger & "string part 2"字符串或与您记录变量使用替换功能,以取代%Logger%(例如Replace(templateString, "%Logger%", logger))需要做字符串连接。这与批处理文件中使用的格式%1没有直接的关系。

-1

这为我工作:

Dim fs, ws, Path 
Set ws = CreateObject("WScript.Shell") 
Path = ws.ExpandEnvironmentStrings("%UserProfile%\testfile.txt") 
ws = Nothing 
Set fs = CreateObject("Scripting.FileSystemObject") 
Set f = fs.CreateTextFile (Path, True) 
f.WriteLine("This is a test") 
f.Close() 
f = Nothing 

不要以为 “C:\用户” 将在每个系统上有效。有时您可能想要为用户个人资料使用不同的位置。我也查看了%AppData%环境变量,但在我的情况下指向AppData \ Roaming,并且您想要AppData \ Local。

+0

C的信息:\用户未在EV有效在我们的环境中,我们有使用文档和设置的XP以及将用户配置文件存储在服务器上的几个站点。我打算确定操作系统并有条件地运行一个目录。我继续测试脚本,它遇到了同样的问题,它会调用任何运行该文件的用户配置文件。我将编辑帖子以使其更加清晰,对此感到遗憾。 – MaskedPlant

3

我想你的意思是一个脚本变量。试试这个:

logger = Inputbox("What is ID?","Domain ID") 
Call update("C:\Users\"& logger &"\AppData\Local\stat.ini", strOld, strNew) 
+0

它的工作谢谢你,这正是我正在寻找。 – MaskedPlant

3

你可以在vbs中使用命令行参数。请参阅以下TechNet网站:使用例如VBS底部 http://technet.microsoft.com/en-us/library/ee156618.aspx

,您可以根据脚本名称后输入计算机名Ping.vbs答复时,其被称为(C:\脚本\ Ping.vbs主机名)

这里有WScript.Aurguments https://www.google.com/search?q=WScript.Arguments&sourceid=ie7&rls=com.microsoft:en-us:IE-Address&ie=&oe=


'Ping.vbs: 
Dim arArguments, strArgument 
Set arArguments = WScript.Arguments 
WScript.Echo WScript.Arguments.Count 
For Each strArgument in arArguments 
If Ping(strArgument) Then 
    WScript.Echo strArgument & " is available." 
Else 
    WScript.Echo strArgument & " is not available." 
End If 
Next 
Function Ping(myHostName) 
Dim colPingResults, objPingResult, strQuery 
strQuery = "SELECT * FROM Win32_PingStatus WHERE Address = '" & myHostName & "'" 
Set colPingResults = GetObject("winmgmts://./root/cimv2").ExecQuery(strQuery) 
For Each objPingResult In colPingResults 
    If Not IsObject(objPingResult) Then 
     Ping = False 
    ElseIf objPingResult.StatusCode = 0 Then 
     Ping = True 
    Else 
     Ping = False 
    End If 
Next 
Set colPingResults = Nothing 
End Function