Пакетные файлы Показать элементы запуска - PullRequest
2 голосов
/ 13 апреля 2009

В Windows, как я могу отобразить элементы автозапуска из пакетного файла?

Ответы [ 5 ]

3 голосов
/ 13 апреля 2009

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

dir "%homedrive%%homepath%\start menu\progams\startup"

и "Все пользователи" (обычно) с:

dir "%homedrive%%homepath%\..\all users\start menu\progams\startup"

Все, что вам нужно сделать, это манипулировать именами файлов, чтобы удалить путь, и ".lnk" в конце, чтобы получить имена ярлыков.

Если вы сначала cd перейдете в эти каталоги и просто выполните команду dir, вам даже не придется удалять путь.

UPDATE:

Если, как показывают ваши комментарии, вы хотите, чтобы все, что запускалось при запуске вашей системы, было найдено повсюду. Вы захотите получить копию Autoruns (или его брата командной строки Autorunsc для ваших целей).

Это лучший подход, поскольку он «благословлен» самими Microsoft.

2 голосов
/ 13 апреля 2009

Если вы можете использовать PowerShell, здесь приведен фрагмент кода, который использует AUTORUNSC .

$autoruns = [xml](AUTORUNSC -x 2>$null)

foreach ($item in $autoruns.autoruns.item)
{
  If ($item.Description.Length -gt 0)
  { Write-Output $item.Description.Trim() }
  Else
  { Write-Output "n/a"}
  Write-Output $item.ItemName.Trim()
  Write-Output $item.imagepath.Trim()
  "---------------------------------------"
}

EDIT : параметр -x в AUTORUNSC позволяет выводить XML.

0 голосов
/ 13 апреля 2009

Вы можете использовать команду reg для запроса соответствующего ключа реестра:

reg QUERY HKCU\Software\Microsoft\Windows\CurrentVersion\Run > out

Это даст вам список ключей в файле "out", например:

    UIWatcher    REG_SZ    D:\Utils\Ashampoo UnInstaller\UIWatcher.exe
    SpybotSD TeaTimer    REG_SZ    C:\Program Files\Spybot - Search & Destroy\TeaTimer.exe
    SandboxieControl    REG_SZ    "C:\Program Files\Sandboxie\SbieCtrl.exe"
    WMPNSCFG    REG_SZ    C:\Program Files\Windows Media Player\WMPNSCFG.exe

Вам необходимо проанализировать этот список, чтобы получить первый и второй токен, где REG_SZ - разделитель. Если вы хотите придерживаться простого пакетного языка (meh ...), который представляет собой не что иное, как проблему, вам придется использовать команду FOR / F для получения токенов в порядке:

FOR /F "tokens=1,2 delims=$" %i in (out) do @echo %i %j

Перед этим вам нужно заменить REG_SZ на какой-нибудь символ, скажем, $, поскольку FOR не принимает разделители строк. Весь процесс может быть помещен в один пакетный файл:

SETLOCAL EnableDelayedExpansion

@echo off > StartUp.txt
FOR /F "skip=2 usebackq tokens=* delims= " %%i in (`reg QUERY HKCU\Software\Microsoft\Windows\CurrentVersion\Run`) do (  
    set LINE=%%i
    set LINE=!LINE:REG_SZ=$!
    FOR /F "tokens=1 delims=$" %%j in ('cmd.exe /C echo !LINE!') do echo %%j >> StartUp.txt
)

После запуска StartUp.txt должен содержать полные имена программ, каждая в отдельной строке. Конструкция 'cmd.exe / C echo! LINE!' сбивает с толку. Я поставил это в качестве обходного пути к проблеме со сканированием переменной LINE. Согласно документации это должно быть просто "! LINE!" но по какой-то причине это не работает ... На случай, если вам интересно! VAR! синтаксис, см. set /?

В любом случае, пакетный язык отнимает много времени, поэтому лучше избегать его, если это возможно, или использовать его в сочетании с некоторыми серьезными инструментами, такими как awk, sed, autohotkey и т. Д. Каждый из них может анализировать выходные данные команды reg. в одной строке регулярного выражения, в то время как autohotkey может создать даже хороший графический интерфейс для него, и вы можете полностью избежать пакетного сценария.

В конце также не забудьте также запустить раздел «Все пользователи».

0 голосов
/ 13 апреля 2009

Как уже отвечено, элементы запуска представляют собой комбинацию элементов запуска для «Все пользователи» и текущего пользователя. Элементы запуска могут быть размещены либо в виде ссылок в папках автозагрузки меню «Пуск», либо в виде записей реестра.

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

Что касается реестра, я не думаю, что вы можете запросить его, используя только пакетный скрипт. Это можно сделать из скрипта PowerShell, если это возможно. В противном случае, я думаю, что самый простой способ выполнить задачу - создать небольшую утилиту для этой задачи. (Это было бы легко сделать на одном из языков .NET, или вы можете сделать это на C, если не можете полагаться на наличие .NET Framework).

Записи реестра можно найти здесь, для всех пользователей:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

А для текущего пользователя:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

Наконец, имейте в виду, что реестр также содержит ключ RunOnce; который содержит записи, которые должны быть запущены только один раз при запуске, а затем удалены.

0 голосов
/ 13 апреля 2009

Кажется, что «Все пользователи» не отображают то, что в MSConfig. Есть ли возможность запросить реестр, чтобы получить записи MSConfig StartUp?

...