Получение значения переменной пакетного файла, которая находится в другой переменной - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь создать командный файл, который добавляет ярлык на рабочий стол к общему сетевому ресурсу с помощью 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.

1 Ответ

0 голосов
/ 22 ноября 2018

Решение состоит в том, чтобы использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...