Answers:
该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
dir /a
然后按Enter。如果不包括/ a,则Windows不会列出连接点。您可以尝试dir
和dir /a
目录上的区别\Users\YourUsername
从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
成功,则输出一件事,如果没有,则输出其他东西。
注意事项:
使用PowerShell,至少在Windows OS上,可以在任何给定目录中找到符号链接,例如:
Get-ChildItem 'C:\nodejs\bin\' | Where-Object {$_.LinkType -eq 'SymbolicLink'}
更简洁的选择是使用Get-ChildItem
的别名ls
:
ls 'C:\nodejs' -Attributes ReparsePoint -Recurse
通过执行以下任一操作,您可以在符号链接上获取相关信息:
获取文件项并输出其Target属性。目标是符号链接的“值”。另外,用于在操作系统之间并置时创建符号链接的方法或命令签名,“目标”,“路径”和/或“值”的参数名称可能具有与不同OS上的另一方法签名不同的含义。
E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Target
E:\AIT\out\dependency_symlink.cmd
获取文件项并输出其LinkType属性。LinkType值为SymbolicLink的项目意味着它是象征性的。
E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty LinkType
SymbolicLink
获取文件项并输出其Mode属性。l
模式值中带有的项目表示它是符号链接。
E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Mode
-a---l
获取文件项并输出其Attributes属性。带有ReparsePoint值的项目可能表示符号链接。
E:\AIT> Get-Item -Path 'C:\nodejs\bin\ionic.cmd' | Select-Object -ExpandProperty Attributes
Archive, ReparsePoint
请勿fsutil
用于检查项目是否为符号链接。首先,由于errorlevel包含错误,因此有时它保持为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”是符号链接。
在Powershell中:
dir | select Name, LinkType
所有积分@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
如果您确实要使用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