如何在 Windows 10 上打开符号链接的实际文件夹(具有“真实”路径)

如何在 Windows 10 上打开符号链接的实际文件夹(具有“真实”路径)

我已经使用脚本在系统上设置了一些符号链接。我实际上想像快捷方式一样使用这些符号链接,这样当我在 Windows 资源管理器中打开符号链接时,它会带我进入真实文件夹,而不是假文件夹!

所以我想打开

C:\user\username\deep\path\to\folder\target

而不是

C:\user\username\symlinkname

我认为实际上我应该使用快捷方式而不是符号链接,但使用脚本创建它们并不容易(特别是在我工作时锁定的机器上)。

答案1

您可以从符号链接文件夹中的 cmd 调用此脚本来通过 cd 转到真实目录(追踪任意数量的符号链接):

例子:

c:\> md x
c:\> mklink /d x y 
c:\> cd y
c:\y> mosh_realdir2.cmd
c:\x>

$ cat mosh_realdir2.cmd

setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in ('bash mosh_realdir1.sh .') do call set PWD_REAL0=%%a
:: change bash slash to backslash for cmd
set PWD_REAL1=!PWD_REAL0:/=\
 cd /d !PWD_REAL1!

需要 cygwin bash 来追踪反向链接:

$ cat mosh_realdir1.sh

USAGE="
What: Resolve symlinked dir to realdir, by going up the dirs.
Usage: $0 symdir or pwd   .. prints realdir -> symdir by back chasing links.
Also see: namei.exe 
GPL(C) linkedin.com/in/moshahmed
"
 
if [[ .$1 == .-h ]] ;then
  echo  "$USAGE"
  exit
fi

NAME=$(cygpath -wam .)
case $NAME in *\ *) NAME="$(cygpath -dasm .)" ;; esac # 8.3 name if has space.
# echo $NAME
# Go up the tree to Drive: if (DIR != PREV) NAME =~ s/$PREV/$SYN/
while true ;do
  PREV=$DIR
  DIR=$(cygpath -wam .) 
  case $DIR in *\ *) DIR="$(cygpath -dasm .)" ;; esac # shorten name if spaces.
  if [[ ( -n "$PREV" ) && !( $PREV =~ $DIR* ) ]] ;then
    SYM=$DIR/${PREV##*/}
    NAME=$(echo $NAME | perl -lpe "s,$PREV,$SYM,")
    # echo $NAME
  fi
  case $DIR in [A-Z]:/ | [A-Z]:/cyg* | / ) break ;; esac # TOPLEVEL
  cd $DIR/.. # Go up one level
done
echo $NAME 

相关内容