Dired move file breaks relative symlinks. Maybe we can call this a
bug. I find a workaround with this advice. I use this to move files
(rel symlinks) around in a git-annex repo without brokening it. I am
quite new to emacs, I am not sure if that has any side effect.
(defun my-rename-file (file newname &optional ok-if-already-exists)
"fix path for relative symlink"
(if (file-symlink-p newname)
(let ((target (expand-file-name (file-symlink-p newname) (file-name-directory file))))
(if (and target (string-equal system-type "gnu/linux") (not (file-exists-p newname)))
(dired-make-relative-symlink target newname t)))))
(advice-add #'rename-file :after #'my-rename-file)
There are some complicated examples of dealing with symlink :
I am not sure if windows has relative shortcuts. This link show you can use symlinks in windows: