.TargetPath foi inesperado neste momento

0

Eu quero obter o Alvo de todo o atalho situado na pasta da barra de tarefas. Estou executando o seguinte código no arquivo .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
)

e está me dando um erro dizendo que .TargetPath é inesperado no momento.

    
por Dhruv Singhal 02.10.2018 / 11:27

1 resposta

1

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
    
por 02.10.2018 / 13:03