【问题标题】:Getting the value of a Batch File Variable that is within another Variable获取另一个变量中的批处理文件变量的值
【发布时间】:2018-11-22 16:58:17
【问题描述】:

我正在尝试创建一个批处理文件,该批处理文件使用“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 查询”返回字符串 %USERPROFILE%\desktop,但由于它位于变量本身 (DTLOC) 中,它永远不会解析为实际值。所以我能从 DTLOC 得到的只是%USERPROFILE%\desktop 而不是c:\users\username\desktop。 从批处理文件输出的实际命令给出:

mklink %USERPROFILE%\desktop\"Shortcut Name" "\\NETWORK-PC\Share Name" /D

这会导致快捷方式创建失败并出现“找不到文件”错误。

有没有办法扩展“reg query”的输出以给出实际值,以便可以在 mklink 命令中使用。

【问题讨论】:

  • 在前面插入call 命令:call mklink %DTLOC%...
  • 添加通话效果很好,谢谢。

标签: file batch-file variables


【解决方案1】:

解决方案是使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2020-02-20
    • 2017-11-28
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多