Почему oShell.Run не работает

Этот код не работает

set oShell = WScript.CreateObject ("WScript.shell")
oShell.Run "%appdata%\Test.bat",0,False

Но этот код работает

set oShell = WScript.CreateObject ("WScript.shell")
oShell.Run "C:\Users\User\AppData\Roaming\Test.bat",0,False

Почему oShell.Run не находит файл?


person checkmate    schedule 17.07.2016    source источник
comment
Вы не передали путь к файлу. См. oShell.ExpandEnvironmentStrings. Так что oShell.Run oshell.ExpandEnvironmentStrings("%appdata%\Test.bat"),0,False за один лайнер.   -  person    schedule 18.07.2016
comment
Проверьте значение %APPDATA%: oShell.Run "cmd /k echo %APPDATA%", 1, True   -  person Ansgar Wiechers    schedule 18.07.2016


Ответы (2)


@ansgar-wiechers — это спот о ExpandEnvironmentStrings(), поскольку некоторые другие ответы предлагали его использовать, но документация ясна;

От MSDN — метод запуска (узел сценариев Windows)
Метод запуска возвращает целое число. Метод Run запускает программу, работающую в новом процессе Windows. Вы можете сделать так, чтобы ваш сценарий дождался завершения выполнения программы, прежде чем продолжить. Это позволяет запускать сценарии и программы синхронно. Переменные среды в аргументе strCommand автоматически раскрываются. Если тип файла был правильно зарегистрирован в конкретной программе, вызов run для файла этого типа запускает программу. Например, если в вашей компьютерной системе установлено приложение Word, вызов команды «Выполнить» для файла *.doc запускает Word и загружает документ. В следующей таблице перечислены доступные параметры для intWindowStyle.

Если у вас возникли проблемы с использованием переменных среды в вашем коде, вероятно, они были переназначены сценарием входа или политикой. Вы можете проверить это, введя в командной строке следующее:

echo %appdata%

Если это ничего не возвращает или не соответствует вашим ожиданиям, переменная окружения %appdata% была переназначена.

Чтобы показать вам, как легко переназначить значение из командной строки

>set appdata
APPDATA=C:\Users\Example.Profile\AppData\Roaming
>set appdata=c:\
>echo %appdata%
C:\

Очевидно, вы можете отменить это снова, чтобы исправить проблему;

>set appdata=C:\Users\Example.Profile\AppData\Roaming
>echo %appdata%
C:\Users\Example.Profile\AppData\Roaming

Отказ от ответственности: это всего лишь примеры изменения переменных среды через командную строку, это не изменяет глобальные переменные среды, а изменения влияют только на текущий экземпляр командной строки. Для этого вам нужно изменить реестр с помощью редактора реестра, групповой политики и т. д. или использовать экран «Свойства системы» в панели управления.

Расположение AppData настраивается в реестре как часть папок оболочки пользователей, составляющих профиль пользователя.

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

Значение по умолчанию для ключа AppData в реестре:

%USERPROFILE%\AppData\Roaming

В любом случае VBScript не виноват.


Полезные ссылки

person user692942    schedule 18.07.2016
comment
Этот код работает нормально ‹code› set oShell = CreateObject (WScript.shell) AppData = oshell.ExpandEnvironmentStrings(%appdata%) wscript.echo Appdata oshell.run(Appdata & \Test.bat),0,False ‹code›, но когда запуск Windows показывает это сообщение: ‹code› Windows Script Host C:\Users\User\AppData\Roaming ‹code› - person checkmate; 20.07.2016
comment
@checkmate не уверен, чего вы пытаетесь достичь, но как отображается WScript.Echo Appdata & "\Test.bat"? Должно быть C:\Users\User\AppData\Roaming\Test.bat. - person user692942; 20.07.2016
comment
Но я хочу получить доступ через %appdata%, а не C:\Users\User, изменение пути на других машинах - person checkmate; 21.07.2016
comment
@checkmate Извините, я не могу помочь, я пытался объяснить, как проверить переменную среды %appdata%, но вы продолжаете противоречить себе и, кажется, сбиты с толку тем, что дает вам %appdata. Поэтому я ухожу от этого вопроса. Удачи. - person user692942; 21.07.2016

set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo "WinDir is " & WshShell.ExpandEnvironmentStrings("%WinDir%\system32")

И запустить его

C:\Users\User>cscript "C:\Users\User\Desktop\New Text Document.vbs"
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

WinDir is C:\Windows\system32

Если это не работает, спросите на www.superuser.com, почему ваша система неправильно настроена.

person Community    schedule 17.07.2016
comment
Вам не нужны ExpandEnvironmentStrings(), так как Run() расширяет их автоматически. Однако предложение попробовать другую переменную среды является хорошим, поскольку, вероятно, %appdata% было переназначено, а другие в порядке. - person user692942; 18.07.2016