2012-04-17 1 views
0

これは私の問題です:ショートカットのターゲットがバッチまたはVBで存在するかどうかを確認しますか?

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を助ける:ALL .lnksの目標は、この特別なラテン文字 "ú"(私は変換することができますを持っている:私はあまりにもサードパーティ製のアプリ:)

PD2からの解決策に合意ソリューションがバッチの場合はchar、他の方法ではcharを設定する方法はわかりません)

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

EDIT

ナラヤナン私はVBAを使用する方法がわからないが、私は、あなたの助けのためのあなたにありがとうをポイントを与えます。

私はバッチ年前に一時ファイルクリーナーを作ったことを思い出しましたが、タスクバーのショートカットをチェックして削除するのと同じ問題がありました。

私は問題を解決してきましたが、私は誰かのために有用である場合のxD

はこれを取る覚えていませんでした:

(VBSはERRORLEVELコードを送信します)

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 

さようなら

答えて

1

私の限られた知識のために用意された解決策がないので、それを行うことは大きな苦痛であるようです。

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

関連する問題