2012-04-17 63 views
0

這是我的問題:檢查批處理或vbs中是否存在快捷方式的目標?

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的解決方案:ALL .lnks的目標有這樣的特殊字符拉丁文「ú」(我可以轉換字符如果解決方案是批處理,其他方式我不知道如何設置字符右)

謝謝!

編輯

納拉亞南我不知道如何使用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 

再見

回答

1

這樣做似乎很痛苦,因爲沒有現成的解決方案可用於我有限的知識。

但是,如果鏈接的目標丟失,您可以創建一個小的可執行文件,它將返回一個錯誤級別。 This網頁說明如何創建這樣的程序。

相關問題