问题: 我在工作中使用 Dropbox,但同事无法跟踪我创建的快捷方式。附言:我在这里交替使用“快捷方式”(Windows 的称呼)和“别名”(Mac 的命名法)。
它不起作用的原因是快捷方式与我的特定用户文件夹绑定:(“C:\Users\MyUserFolderName\Company Dropbox...”)。
我可以手动编辑我创建的每个别名的属性部分,并将“C:\Users\MyUserFolderName”替换为“%USERPROFILE%”(例如:“%USERPROFILE%\Company Dropbox...”但是,这很乏味。
我经常想从多个文件创建别名,在这种情况下我必须打开每个文件并更改目标。我如何强制 Windows 自动用“%USERPROFILE%”替换我的用户文件夹?
或者,如果做不到这一点,如何使用 Autohotkey 创建右键菜单选项,以创建快捷方式并自动用“%USERPROFILE%”替换我的用户文件夹?
迄今为止的研究:
- 我在看使用 Windows 快捷方式的相对路径。然而,得票最多的答案是使用一个名为“相对的“,并且该实用程序似乎没有使用%USERPROFILE%(而是使用“%windir%”。
- 我在看如何让 Excel 在外部工作簿链接中使用相对路径,但它没有解决别名创建过程的问题。
答案1
您可以尝试以下方法...
如果您在 AutoHotkey 中运行它,它只会停留并等待您打开您创建的快捷方式的属性。一旦它检测到您已打开Shortcut Properties
,它就会检查路径是否包含 Windows 默认填充的硬编码用户配置文件路径,如果是,则会将硬编码路径替换为%USERPROFILE%
。
其用法是像平常一样创建快捷方式,然后打开要更新的每个快捷方式的属性框。由于更新过程相对简单,并且会自动保存新路径,因此这可能会减少当前进程的耗电量,即使它不是带有右键单击选项等的自定义 shell 扩展。
如果您发现需要暂时暂停脚本,您也可以在脚本运行时通过标准托盘菜单选项来执行此操作。
; Auto-replace shortcut links with %USERPROFILE%
SetTitleMatchMode, 2
EnvGet, myUserProfile, UserProfile
Loop {
WinWaitActive, Shortcut Properties ahk_class #32770
nowID:=WinExist("A") ; Save the ID of the current window for use below if needed
ControlGetText, myTarget, Edit2
If InStr(myTarget, myUserProfile) {
newTarget := "%USERPROFILE%" . SubStr(myTarget, StrLen(myUserProfile)+1)
ControlSetText, Edit2, %newTarget%
; hardcode this to False if you don't want the dialog box to auto-save
If autoSave:=True
SendInput, {Enter}
ToolTip, Successfully updated shortcut link to use UserProfile...
Sleep 1500
ToolTip
}
WinWaitNotActive, ahk_id %nowID% ; don't re-execute immediately if we're not auto-saving
}