আমি কীভাবে উইন্ডোজটিতে স্বয়ংক্রিয়ভাবে ভাঙ্গা প্রতীকগুলি খুঁজে পেতে পারি?


11

এটি খারাপ শৈলী কিনা তা নিশ্চিত নই, তবে আমি এই প্রশ্নটি এখানে জিজ্ঞাসা করছি কারণ আমি অন্য কোথাও উত্তরটি খুঁজে পাইনি এবং তারপরে আমি নিজে থেকেই একটি সমাধান বের করে কাজ করেছি। আমি অন্য লোকের সমাধানগুলি দেখতে আগ্রহী, তবে কয়েক দিন পরে আমি আমার নিজের পোস্ট করব।

আমার নির্দিষ্ট ক্ষেত্রে, আমি উইন্ডোজ 7 এ চলছি, তবে আমি উইন্ডোজের অন্যান্য / পুরানো সংস্করণগুলির উত্তরগুলিতে আগ্রহী। আমি বুঝতে পারি যে একটি উত্তর "ইউনিক্স সন্ধানের একটি সংস্করণ ইনস্টল করুন এবং তারপরে ইউনিক্স হিসাবে সমাধান করুন ", তবে আমি আরও একটি "দেশীয়" সমাধান চাইছিলাম।

সম্পাদনা ২০১২-০7-১ation: স্পষ্টকরণ: "স্বয়ংক্রিয়ভাবে" বলতে আমি বলতে চাইছি কোনও জিইউআই সরঞ্জামের চেয়ে একটি স্ক্রিপ্টের অংশ হিসাবে চালাতে পারি যা একটি বোতামের টিপে সমস্ত কাজ করে, কারণ আমি এটি করতে চাই এই অপরিবর্তিত।

উত্তর:


4

কিছুটা বিচলিত, তবে এখানে আমার প্রশ্নের নিজের উত্তর। এটি মূলত ইউনিক্সে সাধারণের মতো একই পদ্ধতির: সমস্ত লিঙ্কগুলি সন্ধান করুন, তারপরে ভাঙ্গাগুলির উপর কাজ করুন; এটা ঠিক সংক্ষিপ্ত নয়। নীচের স্ক্রিপ্টটি তাদের সম্পর্কে কিছু তথ্য ছড়িয়ে দেওয়ার পরে ভাঙা প্রতীকগুলি মুছে ফেলে।

@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

3

নিম্নলিখিত সরঞ্জামগুলি আপনাকে উইন্ডোজে সিমলিংক সন্ধান এবং অপসারণে সহায়তা করতে পারে

  1. জংশন লিঙ্ক যাদু
  2. Diskjunction

এগুলি উভয়ই হ'ল জিইউআই সরঞ্জাম, তবে আমি পরিষ্কার ছিলাম না: আমি স্ক্রিপ্টে চালাতে পারি এমন কিছু চাই। আমি স্পষ্ট করার জন্য প্রশ্নটি সম্পাদনা করেছি।
হিউজি

2

আপনি সেজলিঙ্কস নামে একটি ওপেন-সোর্স ইউটিলিটিও চেষ্টা করতে পারেন , এটি উইন্ডোজ এনটিএফএস জংশন, প্রতীকী লিঙ্ক এবং শর্টকাটগুলি দেখায় এবং চেক করে।


0

সাইগউইন 64৪৪ (সন্ধান করুন, xargs, sh, ls) ব্যবহার করুন (মৃত এনটিএফএস হার্ডলিঙ্কগুলির জন্য উইন 7-তে পরীক্ষা করা)

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

দ্রষ্টব্য: পরীক্ষা-নিহত এনটিএফএস হার্ডলিঙ্কের সাথে প্রত্যাশার মতো কাজ করে না।


1
ধন্যবাদ @ মোশ কিন্তু আমি যেমন বলেছি, আমি এমন কিছু চাই যা "ইউনিক্স ইউটিউসের সংস্করণ ইনস্টল করুন" এর সাথে জড়িত না - কারণ আমি এমন একটি স্ক্রিপ্ট চাই যা অন্যরা প্রস্তুতি ছাড়াই চলতে পারে।
হিউজি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.