我正在尝试创建一个批处理文件,该文件使用“mklink”将桌面快捷方式添加到网络共享。我的代码运行良好,但我现在发现一些用户的桌面已重定向。为了解决这个问题,我尝试使用“reg query”来获取当前桌面位置
for /f "tokens=3" %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop ^|findstr /ri "REG_EXPAND_SZ"') do set DTLOC=%%a
mklink %DTLOC%\"Shortcut Name" "\\NETWORK-PC\Share Name" /D
现在的问题是,对于普通的桌面位置,“reg query”返回字符串,%USERPROFILE%\desktop
但由于这是在变量本身 (DTLOC) 内,它永远不会解析为实际值。所以我能从 DTLOC 得到的只是%USERPROFILE%\desktop
而不是说c:\users\username\desktop
. 从批处理文件输出的实际命令给出:
mklink %USERPROFILE%\desktop\"Shortcut Name" "\\NETWORK-PC\Share Name" /D
这会导致快捷方式创建失败,并出现“找不到文件”错误。
有没有办法扩展'reg query'的输出以给出实际值,以便它可以在mklink命令中使用。
解决方案是使用call
,它引入了命令行的另一个解析阶段,因此嵌套变量也被扩展。另外,我建议调整报价如下:
for /f "tokens=3" %%a in ('
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop ^|findstr /ri "REG_EXPAND_SZ"
') do set "DTLOC=%%a"
call mklink "%DTLOC%\Shortcut Name" "\\NETWORK-PC\Share Name" /D
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句