Я хочу получить цель всех ярлыков, расположенных в папке панели задач. Я запускаю следующий код в .bat файле

@ECHO OFF
FOR %%i IN ("C:\Users\kirti\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\*.lnk") DO (
powershell $sh = New-Object -ComObject WScript.Shell
powershell $target = $sh.CreateShortcut('%%i').TargetPath
powershell echo $target
)

и это дает мне ошибку, говоря.TargetPath является неожиданным в это время.

1 ответ1

1

Вы вызываете powershell 3 раза, они не разделяют одну и ту же область.

  • Добавьте команды в одну строку, разделенные точкой с запятой, чтобы иметь одну область видимости.
  • Используйте переменную окружения APPDATA для адресации папки для текущего пользователя.

:: Q:\Test\2018\10\02\SU_1363191.cmd
@ECHO OFF
FOR %%i IN ("%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\*.lnk") DO (
  powershell -Nop -c "$sh = New-Object -ComObject WScript.Shell;\".lnk: {0}`nPath: {1}`n\" -f '%%~nxi',$sh.CreateShortcut('%%i').TargetPath"
)

Вышеупомянутый пакет довольно медленный, так как он вызывает powershell отдельно для каждой итерации %%i , этот сценарий powershell выполняет итерацию самих файлов .lnk.

## Q:\Test\2018\10\02\SU_1363191.ps1
$sh = New-Object -ComObject WScript.Shell
Get-ChildItem "$($Env:AppData)\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\*.lnk"|
%{".lnk: {0}`nPath: {1}`n" -f $_.Name,$sh.CreateShortcut($_.FullName).TargetPath}

а также может быть упакован в партию:

:: Q:\Test\2018\10\02\SU_1363191_2.cmd
@powershell -Nop -c "$sh = New-Object -ComObject WScript.Shell;gci \""$($Env:AppData)\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\*.lnk\""|ForEach{\"".lnk: {0}`nPath: {1}`n\"" -f $_.Name,$sh.CreateShortcut($_.FullName).TargetPath}"

Один и тот же пример вывода для всех 3 вариантов:

> SU_1363191.cmd
.lnk: Bash on Ubuntu on Windows.lnk
Path: C:\Windows\System32\bash.exe

.lnk: Command Prompt.lnk
Path: C:\WINDOWS\system32\cmd.exe

.lnk: Mozilla Firefox.lnk
Path: C:\Program Files\Mozilla Firefox\firefox.exe

.lnk: PowerShell 6 (x64).lnk
Path: C:\Program Files\PowerShell\6\pwsh.exe

.lnk: Visual Studio Code.lnk
Path: C:\Program Files\Microsoft VS Code\Code.exe

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .