Comment puis-je trouver automatiquement des liens symboliques brisés vers Windows?

Je ne sais pas que c'est un mauvais style, mais je pose cette question ici, car je ne pouvais pas trouver une réponse ailleurs, puis j'ai développé une décision seule. Je serais intéressé de voir des solutions à d'autres personnes, mais après quelques jours, je publierai le mien.

Dans mon cas particulier, je travaille dans Windows 7, Mais je serais intéressé par des réponses pour d'autres / Plus anciennes versions Windows. Je comprends qu'une réponse - "Installez la version Unix, Trouver et ensuite
https://serverfault.com/questi ... cally
", Mais je voulais plus" originaire de "solutions.

ÉDITER 2012-07-17:

Clarification: Sous «automatiquement», je veux idéalement dire que je peux exécuter dans le cadre du script, et non un outil avec une interface graphique qui effectue tout le travail en appuyant sur le bouton, car je veux le faire sans surveillance.
Invité:

Hannah

Confirmation de:

Plusieurs tardives, mais voici ma réponse à ma question. En fait, c'est la même approche que l'habituel dans Unix: Trouvez tous les liens, puis processus désactivé; Ce n'est tout simplement pas si concis. Le scénario ci-dessous supprime des liens symboliques cassés après avoir déchargé des informations sur eux.

@echo off

rem Grab the list of directories to scan, before we "pushd to dir containing this script",
rem so that we can have the default be "dir from which we ran this script".
setlocal
if x%CD%==x (echo Command Extensions must be enabled. && goto :eof)
set ORIGINAL_DIR=%CD%

pushd %~dp0

set DIRS_TO_CHECK=%*
if x%DIRS_TO_CHECK%==x (
set DIRS_TO_CHECK=.
)

rem Find all the files which are both links (/al) and directories (/ad).
rem (We use "delims=" in case any paths have a space; space is a delim by default.)
rem If not, delete it (and assume something else will fix it later :-).
echo Deleting broken symlinks ...
echo.
for %%D in (%ORIGINAL_DIR%\%DIRS_TO_CHECK%) do (
echo Checking %%D
echo.
pushd %%D
if errorlevel 1 (
echo Cannot find "%%D"
echo.
goto :Next_Dir
)
rem Clean up broken directory links.
for /f "usebackq delims=" %%L in (`dir /adl /b`) do (
rem Check the directory link works.
rem Redirecting to nul just to hide "The system cannot find the file specified." message.
pushd "%%L" >nul 2>&1
if errorlevel 1 (
echo Deleting broken directory symlink "%%L".
rem First dump out some info on the link, before we delete it.
rem I'd rather a more human-readable form, but don't know how to get that.
fsutil reparsepoint query "%%L"
rmdir "%%L"
echo.
) else (
popd
)
)
rem Clean up broken file (non-directory) links.
for /f "usebackq delims=" %%L in (`dir /a-dl /b`) do (
rem Check the file link works.
rem Redirecting to nul just to hide "The system cannot find the file specified." message.
copy "%%L" nul >nul 2>&1
if errorlevel 1 (
echo Deleting broken file symlink "%%L".
rem First dump out some info on the link, before we delete it.
rem I'd rather a more human-readable form, but don't know how to get that.
fsutil reparsepoint query "%%L"
rm "%%L"
echo.
) else (
popd
)
)
popd
:Next_Dir
rem Putting a label on the line immediately before a ')' causes a batch file parse error, hence this comment.
)
echo Deleting broken symlinks ... done.

:Finally
popd

Babette

Confirmation de:

Les outils suivants peuvent vous aider à trouver et à supprimer un lien symbolique dans Windows.

http://www.rekenwonder.com/linkmagic.htm
Diskjunction

Christine

Confirmation de:

Vous pouvez également essayer un utilitaire open source appelé
https://github.com/raspopov/SageLinks/releases
, Il montre et vérifie les connexions Windows NTFS, Liens symboliques et même étiquettes.

Alice

Confirmation de:

Utilisant cygwin64 (find, xargs, sh, ls) (Vérifié par win7 Pour la présence de liens durs morts ntfs)

c:\>   find ./ -type l |  xargs -I % sh -c "ls % > /dev/null 2>&1 || echo %" 

Noter: test -e ne fonctionne pas correctement avec une référence difficile ntfs.

Pour répondre aux questions, connectez-vous ou registre