从.lnk文件中读取并在必要时删除

时间:2015-04-15 10:57:50

标签: batch-file

我想知道在满足特定条件时是否可以批量删除.lnk文件。

例如,假设我有以下文件:     %userprofile%\ Microsoft \ Windows \ Start Menu \ Programs \ Startup \ Software.lnk 此链接文件实际指向C:\ Windows \ System32 \ calc.exe

应删除指向calc.exe而不是software.exe的任何.lnk文件。

如果有人有想法,非常感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用wmic获取快捷方式文件的目标。

for %%I in (shortcut.lnk) do set "shortcut=%%~fI"
wmic path win32_shortcutfile where "name='%shortcut:\=\\%'" get target /format:list | find "="

...将检索目标。如果目标以calc.exe结尾,您只想采取行动,只需为find切换findstr并使用条件执行。

for %%I in (shortcut.lnk) do set "shortcut=%%~fI"
wmic path win32_shortcutfile where "name='%shortcut:\=\\%'" get target | findstr /i "\<calc.exe *$" && (
    del "%shortcut%"
)

如果要遍历目录中的所有快捷方式文件,只需将整个内容放在for循环中并使用延迟扩展。

@echo off
setlocal

for %%I in (*.lnk) do (
    rem // get full path of shortcut target
    set "target=%%~fI"

    rem // Because %target% was defined within this parenthetical code block,
    rem // you must use delayed expansion to retrieve it.

    setlocal enabledelayedexpansion
    wmic path win32_shortcutfile where "name='!target:\=\\!'" get target | findstr /i "\<calc.exe *$" >NUL && (
        echo %%~nxI points to calc.exe.
        >>out.log echo Deleting %%~fI
        del "%%~fI"
    )
    endlocal
)

\<findstr正则表达式中的单词边界。其余部分基于this answer。)

答案 1 :(得分:1)

检查shortcutJS.bat(它是批处理/ jscript混合,应该使用.bat扩展名保存)

您可以使用-examine开关:

shortcutjs.bat -examine "C:\Users\user\Desktop\some.lnk"| find /i "calc.exe" &&(
    del /q /f "C:\Users\user\Desktop\some.lnk"
)