Используйте переменную в пути к файлу в .vbs - PullRequest
3 голосов
/ 24 сентября 2011

Можно ли использовать переменную в пути в .vbs. Моя основная ситуация заключается в том, что у меня есть скрипт vbs, который часто запускается на компьютере, когда один человек вошел в систему и запустился администратором с совершенно другим именем пользователя (предположим, что файл будет щелкнуть правой кнопкой мыши и «Запустить как»).

Сценарий редактирует INI-файл, который находится в каталоге пользователя для пользователя, вошедшего в систему. Я знаю, что в пакете я мог бы просто вставить переменную "C:\Users\%Logger%\AppData\Local\stat.ini", и переменная будет заменена. Но я не могу сделать это в .vbs. Мой сценарий до сих пор. Или посмотрите на большую часть этого ответа здесь .

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 как переменную или есть более простой способ сделать это?

Ответы [ 4 ]

4 голосов
/ 24 сентября 2011

Полагаю, вы имели в виду переменную скрипта.Попробуйте это:

logger = Inputbox("What is ID?","Domain ID")
Call update("C:\Users\"& logger &"\AppData\Local\stat.ini", strOld, strNew)
3 голосов
/ 07 декабря 2012

Вы можете использовать аргументы командной строки с VBS.См. Следующий сайт Technet: http://technet.microsoft.com/en-us/library/ee156618.aspx

, используя пример vbs внизу, вы можете получить ответ Ping.vbs на основе имени компьютера, введенного после имени скрипта при его вызове (C: \ scripts \ 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

2 голосов
/ 24 сентября 2011

Если я правильно понимаю, что вы ищете, вам нужно будет выполнить конкатенацию строк, где вы создадите строку, например "string part 1" & logger & "string part 2", или использовать функцию замены, чтобы заменить %Logger% (например, Replace(templateString, "%Logger%", logger)).с вашей переменной логгера.Нет прямого эквивалента формату %1, используемому в пакетных файлах.

0 голосов
/ 24 сентября 2011

Это сработало для меня:

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: \ Users» будет действительным в каждой системе.Есть моменты, когда вы можете использовать другое местоположение для профилей пользователей.Я также посмотрел на переменную среды% AppData%, но в моем случае это указывало на AppData \ Roaming, и вы хотите, чтобы AppData \ Local.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...