Você está invocando o powershell 3 vezes, eles não compartilham o mesmo escopo.
- Anexe os comandos em uma linha separados por um ponto-e-vírgula para ter um escopo.
- Use a variável de ambiente
APPDATA
para endereçar a pasta para o usuário atual.
:: Q:\Test18\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"
)
O lote acima é bastante lento, pois invoca o powershell separadamente para cada iteração de %%i
, este script do PowerShell repete os próprios arquivos .lnk.
## Q:\Test18\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}
e também pode ser agrupado em um lote:
:: Q:\Test18\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}"
Mesma saída de amostra para todas as três variantes:
> 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\pwsh.exe
.lnk: Visual Studio Code.lnk
Path: C:\Program Files\Microsoft VS Code\Code.exe