Windows で、バッチ ファイルを使用してスタートアップ項目を表示するにはどうすればよいですか?
5 に答える
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 を出力します。
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が区切り文字である最初と2番目のトークンを取得する必要があります。プレーンバッチ言語(meh ...)に固執したい場合は、問題に他なりません。FOR/ Fコマンドを使用して、次の方法でトークンを取得する必要があります。
FOR /F "tokens=1,2 delims=$" %i in (out) do @echo %i %j
その前に、REG_SZをいくつかのcharに置き換える必要があります。たとえば、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コマンドの出力を解析できますregexp行、autohotkeyはそれのための素晴らしいGUIさえ作成することができ、uはバッチスクリプトを完全に回避することができます。
最後に、「すべてのユーザー」のセクションを実行することも忘れないでください。