从 .lnk 快捷方式文件中获取目标文件的路径 (cmd | .bat)

Get targeted file's path from .lnk shortcut file (cmd | .bat)

问题的回答者:

for /f "delims=" %%c in ('type "C:\a\b.d" ^|find /v "" ^| findstr /I /C:".cmd" /C:".bat"') do (
    set paf="%%c"
    set ext="%%~xc"
)

;但我很好奇,是否可以在不知道目标文件的可能扩展名的情况下做同样的事情?

@echo off
set "paf=C:\Users\Stephan\AppData\Roaming\Microsoft\Windows\SendTo\notepad.lnk"

for /f "delims=" %%a in ('wmic path win32_shortcutfile where "name='%paf:\=\%'" get target /value') do (
    for /f "tokens=2 delims==" %%b in ("%%~a") do set ext=%%~xb
)
echo target extension: %ext%

(wmic 需要文件的完整路径并加倍 /)

(归功于 Squashman,他同时使用此方法回答 deleted quesition

作为对已回答问题的补充。

如果您想要 C: 驱动器上批处理文件的任何快捷方式的位置:

WMIC Path Win32_ShortcutFile Where "Drive='C:' And Target Like '%.cmd' Or Target Like '%.bat'" Get Name 2>Nul|FindStr "\.lnk\>"

从批处理文件中,您需要将百分比字符加倍,%

@WMIC Path Win32_ShortcutFile Where "Drive='C:' And Target Like '%%.cmd' Or Target Like '%%.bat'" Get Name 2>Nul|FindStr "\.lnk\>"

如果您想要 D: 驱动器上所有快捷方式的位置:

WMIC Path Win32_ShortcutFile Where "Drive='D:'" Get Name 2>Nul|FindStr "\.lnk\>"

作为最后一个示例,找出 C: 驱动器上每个快捷方式的目标扩展名。

从命令提示符:

For /F "Skip=1 Delims=" %A In ('WMIC Path Win32_ShortcutFile Where "Drive='C:'" Get Target 2^>Nul') Do @For %B In (%~xA) Do @Echo %B

来自批处理文件:

@For /F "Skip=1 Delims=" %%A In ('WMIC Path Win32_ShortcutFile Where "Drive='C:'" Get Target 2^>Nul') Do @For %%B In (%%~xA) Do @Echo %%B