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: 私もサードパーティ製アプリのソリューションに同意します :)

PD2: すべての .lnk のターゲットには、この特別なラテン文字 " ú " があります (解決策がバッチ用であれば、文字を変換できますが、そうでなければ、文字を正しく設定する方法がわかりません)

ありがとうございました!

編集

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

私の限られた知識では既製のソリューションが利用できないため、これを行うのは大きな苦痛のようです。

ただし、リンクのターゲットが欠落している場合にエラーレベルを返す小さな実行可能ファイルを作成できます。このWebページでは、このようなプログラムの作成方法について説明しています。

于 2012-04-17T10:59:12.957 に答える