0

这是我的问题:

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

再见

4

1 回答 1

1

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

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

于 2012-04-17T10:59:12.957 回答