जाँच जहाँ विंडोज 7 में एक प्रतीकात्मक लिंक इंगित करता है


24

विंडोज 7 में, मैं कैसे जांच सकता हूं कि कोई फ़ाइल एक प्रतीकात्मक लिंक है या नहीं, अगर कोई फ़ोल्डर एक जंक्शन है या नहीं, और मैं कैसे जांच कर सकता हूं कि वे कहां इंगित कर रहे हैं (यदि वे सिमलिंक / जंक्शन हैं)। एक्सप्लोरर और कमांड लाइन दोनों में।

कमांड लाइन से इसे करने का एक तरीका होना बहुत जरूरी है, ताकि आप यह जान सकें कि जब आप किसी फोल्डर ट्री की हूबहू प्रतिकृति बनाना चाहते हैं, तो दूसरे कंप्यूटर पर प्रतीकात्मक लिंक की नकल कैसे करें।

यदि मैं किसी फ़ाइल पर राइट क्लिक करता हूँ और "गुण" जाँचता हूँ, तो मुझे कोई संकेत नहीं मिल सकता है कि यह एक प्रतीकात्मक लिंक है।

जवाबों:


26

Dir कमांड dir /a कर सकते हैं:

2012-12-26  09:30 PM    <DIR>          .
2012-12-26  09:30 PM    <DIR>          ..
2012-12-26  09:30 PM                 0 a.txt
2012-12-26  09:30 PM    <SYMLINK>      link.txt [a.txt]

वैकल्पिक रूप से, आप Windows एक्सप्लोरर का उपयोग कर सकते हैं:

Right click column, More, Link Target

यह विंडोज 7 में काम नहीं करता है (माइक्रोसॉफ्ट विंडोज [संस्करण 6.1.7601])
gonzalezea

1
@gonzalezea हाँ, यह करता है। 2012 में विंडोज 7 के साथ काम किया जब मैंने इसे पोस्ट किया, और यह अब भी काम करता है
स्टीवन पेनी

शायद नए उपयोगकर्ताओं के लिए इतना स्पष्ट नहीं है, यह एक कमांड लाइन समाधान है। उपयोगकर्ता को एक कमांड प्रॉम्प्ट खोलना होगा, फिर निर्देशिका को (सीडी कमांड का उपयोग करके) एक प्रतीकात्मक लिंक वाली निर्देशिका में बदलना होगा, फिर डीआईआर कमांड टाइप करें और 'एन्टर' कुंजी दबाएं। गलत निर्देशिका में डीआईआर कमांड चलाना एक सामान्य गलती है। लेकिन समझ में आता है, जब तक आप यह सुनिश्चित नहीं करते हैं कि कौन सी निर्देशिका में सिम्लिंक है (हमेशा स्पष्ट नहीं है, क्योंकि विंडोज जीयूआई आपको स्पष्ट रूप से नहीं बताता है कि क्या किसी विशेष निर्देशिका में कोई सिमिलिंक या जंक्शन हैं)। एक शॉर्टकट के लिए देखें जिसमें SHORTCUT के बजाय FILE FOLDER टाइप हो ।
एड .999

2
लिंक लक्ष्य फ़ील्ड विंडो 7 पर खाली है
Ronen Festinger

1
कमांड लाइन से आपको dir /aफिर टाइप करें एंटर दबाना चाहिए । यदि आप / a को शामिल नहीं करते हैं, तो विंडोज़ जंक्शन बिंदुओं को सूचीबद्ध नहीं करता है। आप के बीच dirऔर dir /aनिर्देशिका में अंतर की कोशिश कर सकते हैं\Users\YourUsername
Paulus

4

StackOverFlow से कॉपी किया गया , मैंने अभी इस लाइन का उपयोग किया है, और यह काम करता है

fsutil reparsepoint query "folder name" | find "Symbolic Link" >nul && echo symbolic link found || echo No symbolic link

स्पष्टीकरण :

MSDN से FSUtil के बारे में: ऐसे कार्य करता है जो फ़ाइल आवंटन तालिका (FAT) और NTFS फ़ाइल सिस्टम से संबंधित होते हैं, जैसे कि पुनर्मिलन बिंदुओं का प्रबंधन, विरल फ़ाइलों का प्रबंधन करना, या वॉल्यूम को कम करना। यदि इसका उपयोग मापदंडों के बिना किया जाता है, तो fsutil समर्थित उपकमांडों की एक सूची प्रदर्शित करता है।

हमारे उपयोग के लिए, हम केवल यह ध्यान रखते हैं कि यह एक ऐसी लाइन को आउटपुट करता है जिसमें "सिम्बॉलिक लिंक" है, अगर यह प्रतीकात्मक है, जो हम तब करते हैं find, और यदि findसफल होता है, तो हम एक चीज का उत्पादन करते हैं, अगर यह नहीं होता है, तो हम कुछ और आउटपुट करते हैं।

नोट :

  • यदि पथ में स्थान है, तो फ़ोल्डर नाम के आसपास के उद्धरण आवश्यक हैं।
  • यह एक ही आउटपुट देता है कि क्या फ़ोल्डर मौजूद नहीं है, या सीलिंक नहीं है, सावधानी के साथ उपयोग करें।

2

कम से कम विंडोज ओएस पर, पॉवरशेल का उपयोग करके, आप किसी भी निर्देशिका में प्रतीकात्मक-लिंक पा सकते हैं, जैसे कि निम्नलिखित:

Get-ChildItem 'C:\nodejs\bin\' | Where-Object {$_.LinkType -eq 'SymbolicLink'}

एक और अधिक संक्षिप्त विकल्प Get-ChildItemउपनाम का उपयोग करना होगा ls:

ls 'C:\nodejs' -Attributes ReparsePoint -Recurse

और आप निम्नलिखित में से कोई भी करके प्रतीकात्मक-लिंक पर प्रासंगिक जानकारी प्राप्त कर सकते हैं:

फ़ाइल आइटम प्राप्त करें और उसकी लक्षित संपत्ति का उत्पादन करें । प्रतीकात्मक-लिंक के "मूल्य" होने का लक्ष्य। इसके अलावा, ऑपरेटिंग सिस्टम के बीच में जूठन बनाते समय सिम्बलिंक बनाने के लिए विधि या कमांड हस्ताक्षर: 'लक्ष्य', 'पथ' और / या 'वैल्यू' के तर्क अलग OS पर किसी अन्य विधि हस्ताक्षर की तुलना में भिन्न अर्थ रख सकते हैं।

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Target
E:\AIT\out\dependency_symlink.cmd

फ़ाइल आइटम प्राप्त करें और इसकी लिंक टाइप संपत्ति का उत्पादन करें । SymbolicLink के LinkType मान के साथ एक आइटम का अर्थ है कि इसका, अच्छा, प्रतीकात्मक।

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty LinkType
SymbolicLink

फ़ाइल आइटम प्राप्त करें और इसकी मोड संपत्ति आउटपुट करें । lमोड मान के साथ कोई आइटम इंगित करता है कि यह एक प्रतीकात्मक-लिंक है।

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Mode
-a---l

फ़ाइल आइटम प्राप्त करें और उसकी गुण संपत्ति का उत्पादन करें । ReparsePoint मान के साथ किसी आइटम को प्रतीकात्मक-लिंक के लिए संकेत दिया जा सकता है।

E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Attributes
Archive, ReparsePoint

1

का प्रयोग न करें fsutil, तो एक आइटम एक प्रतीकात्मक कड़ी है या नहीं की जाँच करने के। पहले क्योंकि एररवेले में त्रुटियां हैं, इसलिए कभी-कभी, यह 0 पर रहता है और एक वास्तविक फ़ोल्डर को एक प्रतीकात्मक लिंक के रूप में देखा जाता है। त्रुटिपूर्ण पर भरोसा नहीं किया जा सकता है।

एक समस्या findयह है क्योंकि find "Symbolic Link"अंग्रेजी में संभव है, लेकिन अन्य भाषाओं में नहीं।

विशेषताओं से खोज करने का अच्छा तरीका है:

for %%i in ("%file_to_test%") do set attribute=%%~ai
set attribute=%attribute:~8,1%
if "%attribute%" == "l" (
    echo It's a symlink!
) else (
    echo Damned! It's real!
)

विशेषताओं को% के साथ मिला "a drahscotlep" और "l" प्रतीकात्मक लिंक के लिए है।


0

यहां सहालगिन को बचाने के लिए एक साइबरविन बैश स्क्रिप्ट दी गई है, अपने पसंदीदा फ़ोल्डरों को पहली पंक्ति में जोड़ें

find c:/ C:/Users/$USERNAME/SendTo C:/Users/$USERNAME/Desktop \
      -maxdepth 2 -type l \
      -printf 'mklink\t/D\t"%p"\t"%l"\n' | \
  perl -pne '\
      s!/cygdrive/(\w)/!\1:/!g;\
      s,/a/,/%USERNAME%/,g;\
      1;' | \
  sort -f | uniq  > restore-links.cmd

0

शक्तियों में:

dir | select Name, LinkType

2
विशेष रूप से क्योंकि यह एक पुराना प्रश्न है जिसमें पहले से ही अच्छे उत्तर हैं, यह समझाते हुए कि आपका उत्तर क्या जोड़ता है और कमांड का प्रत्येक भाग क्या कर रहा है, इसे बेहतर बनाने का एक आसान तरीका है।
संगीत 2

0

सभी श्रेय @SecurityAndPrivacyGuru , [cmd] को

पूरा बैच स्क्रिप्ट / फ़ंक्शन जो सिमिलिंक पढ़ता है {| s फ़ोल्डर में} और आउटपुट सूची उनके और उनके लक्ष्य पथ के साथ

@echo off
setlocal enableExtensions enableDelayedExpansion
cd /D "%~dp0"
set br=^


rem br;


set "pafIf=<<pafToSymlink|pafToFolder>>"
set "gIfZsymLink="
for /f "tokens=*" %%q in ('dir "!pafIf!" /al /b') do (
    for /f "tokens=2 delims=[]" %%r in ('dir /al ^| findstr /i /c:"%%q"') do (
        set "gIfZsymLink=!gIfZsymLink!%%~fq>%%r!br!"
    )
)
set "gIfZsymLink=!gIfZsymLink:~0,-1!"
rem echo "!gIfZsymLink!"

for /f "tokens=1,2 delims=>" %%q in ("!gIfZsymLink!") do (
    echo symlink: %%q , filepath: %%r
)


:scIn
rem endlocal
pause
rem exit /b

0

यदि आप वास्तव में fsutil का उपयोग करना चाहते हैं, तो आप फेल होने से रोकने के लिए दोनों टेकनीक का उपयोग कर सकते हैं। (मैं त्रुटि का समाधान करने के लिए ver> nul का उपयोग करता हूं)

:function_is_symlink_file_folder item_to_test result
rem 0 = Error
rem 1 = Symlink
rem 2 = File
rem 3 = Folder

:function_is_symlink_file_folder
    setlocal enabledelayedexpansion
    set item_to_test=!%~1!
    set /a result=0
    for %%i in ("%item_to_test%") do set attributes=%%~ai
    set attribute_1=%attributes:~0,1%
    set attribute_9=%attributes:~8,1%
    ver >nul
    fsutil reparsepoint query "%item_to_test%" >nul
    if %errorlevel% == 1 (
        if "%attribute_1%" == "d" (
            set /a result=3
        ) else (
            set /a result=2
        )
    ) else (
        if "%attribute_9%" == "l" (
            set /a result=1
        ) else (
            if "%attribute_1%" == "d" (
                set /a result=3
            ) else (
                set /a result=2
            )
        )
    )
    endlocal & set /a %~2=%result%
goto :eof
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.