2015-06-12 3 views
1

Я хочу присвоить переменную путь к файлу, расположенный в папке «Пользователи» на диске C:. Этот путь к файлу отличается для каждого пользователя, но я не могу точно определить, какую переменную среды использовать, и как использовать его с VBScript.Какую переменную среды использовать для пути к файлу?

Пример кода:

Set wshShell = CreateObject("WScript.Shell") 
Set wshSystemEnv = wshShell.Environment("USER") 

'The folder where to save the file: 
strFolder = "C:\Users\" & wshSystemEnv & "\AppData\Roaming\Microsoft\AddIns" 

Так как я использую переменную wshSystemEnv в FilePath, и это даже право переменной?

Ошибка, которая всплывает на strFolder линии

Неверное число аргументов или недействительного присвоение имущества

+0

Используйте 'wshSystemEnv = ...' вместо 'Set wshSystemEnv = ...', вы назначаете строку, а не объект. – omegastripes

+1

@omegastripes Нет. Свойство ['Environment'] (https://msdn.microsoft.com/en-us/library/fd7hxfdd%28v=vs.84%29.aspx) возвращает [' WshEnvironment'] (https: //msdn.microsoft.com/en-us/library/6s7w15a0%28v=vs.84%29.aspx). Вероятно, вы думаете о методе ['ExpandEnvironmentStrings'] (https://msdn.microsoft.com/en-us/library/dy8116cf%28v=vs.84%29.aspx). –

+0

О, мой плохой! @AnsgarWiechers ты прав! – omegastripes

ответ

4

Используйте переменную %APPDATA% среды:

Set wshShell = CreateObject("WScript.Shell") 
Set fso = CreateObject("Scripting.FileSystemObject") 

appData = wshShell.ExpandEnvironmentStrings("%APPDATA%") 

strFolder = fso.BuildPath(appData, "Microsoft\AddIns") 

Всегда строить свои пути, используя метод BuildPath.


Ошибка вы получаете от вашего кода, потому что wshSystemEnv является объектом и не может быть объединен со строками, как это.


Переменная среды %APPDATA% традиционно указывает на папку данных приложения в (роуминг) профиля пользователя. Поскольку Windows Vista Microsoft разделяет эту папку на three subfolders, только одна из них остается частью перемещаемых профилей (AppData\Roaming). Остальные 2 остаются локальными, главным образом, по причинам эффективности синхронизации.

Причина %APPDATA% указывает на Roaming вложенной вместо %USERPROFILE%\AppData, скорее всего, что с его указывать на родительскую папку потребовалось бы много поставщиков приложений выпускать обновления с модифицированными трактов за счет дополнительного уровня иерархии (%APPDATA%\application\foo до %APPDATA%\Roaming\application\foo).

+0

Я благодарен за помощь, ваше решение сработало. Сначала я добавил «Роуминг \ Microsoft \ AddIns» в последнюю строку кода и получал ошибку пути к файлу. Можете ли вы объяснить, почему & APPDATA & берет меня на один уровень глубже, чем ожидалось? –

1

Соответствующая переменная среды «USERNAME».

Set wshShell = CreateObject("WScript.Shell") 
wshSystemEnv = wshShell.ExpandEnvironmentStrings("%USERNAME%") 
strFolder = "C:\Users\" & wshSystemEnv & "\AppData\Roaming\Microsoft\AddIns" 

или вы также можете использовать:

wshSystemEnv = wshShell.Environment("PROCESS").Item("USERNAME") 

Просто Google VBScript переменную окружения, и вы получите множество примеров и ссылок.

+0

В поле ошибки для вашего кода указано «Требуемый объект:« [строка: «b012918»] », а b012918 - мое имя пользователя –

+0

Да - в качестве другого комментария к вашему вопросу вы должны удалить SET со второго линия.SET следует использовать при создании объекта, но не в том случае, если вы просто присваиваете что-то переменной. Я воспроизвел вашу ошибку «Требуемый объект», поставив Set на эту строку, как будто у вас есть вопрос. –

Смежные вопросы