【问题标题】:Check if target of a shortcut exist in batch or vbs?检查快捷方式的目标是否存在于批处理或vbs中?
【发布时间】:2012-04-17 10:07:38
【问题描述】:

这是我的问题:

1º - 我有一个带有子文件夹的原始文件夹,里面全是 mp3 文件

2º - 我有原始文件夹的副本。

3º - 我已将复制文件夹的所有“mp3”文件“转换”为“lnk”文件(使用 NirCMD CLI 工具),维护文件夹结构。

现在我需要定期检查每个 .lnk 的目标是否仍然存在或被截断,因为我每天都在维护原始文件夹,移动文件或做一些事情......

我需要这样的东西:

Echo: Corrupted links:

For /F "tokens=*" %%# in ('Dir /B /AD') do (
    Pushd ".\%%#"
    For /F "tokens=*" %%# in ('Dir /B "*.lnk"') do (
        (SHORTCUT_CHECK_PROGRAM_OR_FUNCTION_OR_SOMETHING.EXE) "%%#"
        IF NOT %ErrorLevel% EQU 0 (Echo: Target doesn't exist: "%%#")
    )
    POPD
)

我检查了以下参数:

mediainfo.exe
nircmd.exe shortcut
shortcut.exe
Vbscripts functions to create shortcuts (i can't find one vbs only for check the target)

但我找不到使用某人向我提供有关快捷方式目标的信息的方法。

请帮忙

PD:我也同意 3rd 方应用的解决方案 :)

PD2:所有 .lnks 的目标都有这个特殊的拉丁字符“ú”(如果解决方案适用于批处理,我可以转换字符,否则我不知道如何设置字符右)

谢谢!

编辑

Narayanan 我不知道如何使用 VBA,但我为您的帮助加分,谢谢。

我记得几年前我批量制作了一个临时文件清理器,我在检查任务栏快捷方式并删除它们时遇到了同样的问题。

我已经解决了这个问题,但我不记得了xD

如果对某人有帮助,请采纳:

(vbs 发送错误级别代码)

PD:代码是西班牙语,但每个人都能看懂:)

:Comprobar_accesos_directos_rotos.vbs
::Check invalid shortcuts target.vbs
:::::::::::::::::::::::::::::::::::::
echo set objshell = createobject("wscript.shell")>"%TEMP%\Comprobar_accesos_directos_rotos.vbs"
echo set objlink = objshell.createshortcut(wscript.arguments(0))>>"%TEMP%\Comprobar_accesos_directos_rotos.vbs"
echo set objfso = createobject("scripting.filesystemobject")>>"%TEMP%\Comprobar_accesos_directos_rotos.vbs"
echo if objfso.fileexists(objlink.targetpath) then>>"%TEMP%\Comprobar_accesos_directos_rotos.vbs"
echo wscript.quit(0)>>"%TEMP%\Comprobar_accesos_directos_rotos.vbs"
echo else>>"%TEMP%\Comprobar_accesos_directos_rotos.vbs"
echo wscript.quit(1)>>"%TEMP%\Comprobar_accesos_directos_rotos.vbs"
echo end if>>"%TEMP%\Comprobar_accesos_directos_rotos.vbs"

For /F "Tokens=*" %%a in ('dir /B /S "%appdata%\Microsoft\Windows\Start Menu\Programs\*.lnk"') do (
    Set archivo="%%a"
    call :comprobar
)
Goto :END

:Comprobar
::::::::::
"%TEMP%\Comprobar_accesos_directos_rotos.vbs" %archivo%

If %errorlevel% EQU 0 (
    goto:eof
) ELSE (
    Del /Q /F %archivo% >nul 2>&1
    goto:eof
)

:END
pause

再见

【问题讨论】:

    标签: vbscript batch-file target shortcut


    【解决方案1】:

    这样做似乎很痛苦,因为就我有限的知识而言,没有现成的解决方案可用。

    但是,您可以创建一个小的可执行文件,如果链接的目标丢失,它将返回错误级别。 This 网页解释了如何创建这样的程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-17
      • 2021-11-23
      • 1970-01-01
      • 2020-10-04
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多