我已经使用脚本在系统上设置了一些符号链接。我实际上想像快捷方式一样使用这些符号链接,这样当我在 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