.TargetPath가 현재 예상치 못한 상태였습니다.


0

작업 표시 줄 폴더에있는 모든 바로 가기의 대상을 얻고 싶습니다. .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
PowerShell 변수는 프로세스 종료 후에도 지속되지 않습니다.
PetSerAl

@PetSerAl 설명하십시오
Dhruv Singhal

답변:


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"
)

위의 배치는의 각 반복마다 파워 쉘을 개별적으로 호출하기 때문에 상당히 느립니다 %%i.이 파워 쉘 스크립트는 .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}"

세 가지 변형 모두에 대해 동일한 샘플 출력 :

> 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.