2017-01-23 2 views
2

Я выполняющем следующую команду:хсору не работает с относительным путем и переменной окружения

xcopy /Y /R "%VS140COMNTOOLS%..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\ 

Эта команда приводит к следующему:

Файл не найден - dbghelp.dll
0 файла (ов) скопировано

echo %VS140COMNTOOLS% приводит к следующему - Я просто расширил среду переменная:

C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ Tools \

Между тем, следующая команда работ:

xcopy /R /Y "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\ 

C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ Tools \ .. \ IDE \ CommonExtensions \ Platform \ DiagnosticsHub \ x86 \ dbghelp.dll
1 Файл скопирован

В чем проблема?

+0

Является ли пакетный файл состоящим только из этой строки или есть еще за ним? – geisterfurz007

+0

@ geisterfurz007: В настоящее время я тестирую в командной строке, так что больше ничего нет. Только этот «xcopy». –

+0

@ geisterfurz007: хорошо пятнистый. Первая строка верна, я отредактировал вторую. –

ответ

1
xcopy /Y /R "%VS140COMNTOOLS%..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\ 

Командная строка выше не с сообщением об ошибке ниже в 4-х случаях:

Файл не найден - DBGHELP.DLL
0 Файл (ы) копируется

  1. Путь к папке, присвоенный переменной окружения VS140COMNTOOLS, не заканчивается обратным слэшем.
    Эта возможная причина ошибки, очевидно, не здесь, так как echo %VS140COMNTOOLS% печатает путь к папке с обратным слэшем в конце.

  2. Переменная среды имеет строковое значение:
    %ProgramFiles(x86)%\Microsoft Visual Studio 14.0\Common7\Tools\
    Но это не тот случай, как в противном случае echo %VS140COMNTOOLS% бы напечатать эту строку.

  3. Путь к папке, присвоенный переменной окружения VS140COMNTOOLS, имеет 1 или более конечных пробелов/вкладок.

  4. Путь к папке, присвоенный переменной окружения VS140COMNTOOLS, начинается с 1 или более ведущих пробелов/вкладок.

Для второй и третьей причиной ошибки, это поможет запустить echo "%VS140COMNTOOLS%" и посмотреть, если выход:

«C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ Tools \ "

или

" C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ Tools \»

Использование синтаксиса set variable=value можете легко получить значение с конечными пробелами/вкладками, назначенными переменной среды, в результате использования в таких ошибках, как эта. Решение использует set "variable=value", как подробно объяснено в ответе на Why is no string output with 'echo %var%' after using 'set var = text' on command line?

Для полноты определение переменной окружения VS140COMNTOOLS с командной строкой

set VS140COMNTOOLS="C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\" 

с первой двойной кавычки после знака равенства вместо слева имя переменной и без каких-либо хвостовых пробелов/вкладки приведет к исполнению командной строки:

xcopy /Y /R ""C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\"..\IDE\CommonExtensions\Platform\DiagnosticsHub\x86\dbghelp.dll" binaries\msvcr\ 

Но эта командная строка приведет к сообщению об ошибке:

Недопустимый номер O f параметры

Таким образом, путь с двойной кавычкой также можно исключить как возможную причину ошибки.

ОТВЕТ: Помочь xcopy вывод, запустив в окне командной строки xcopy /? перечисляет необязательные параметры после исходных и целевых параметров. Конечно, можно указать сначала /R /Y, а затем исходный файл и целевую папку, но в целом рекомендуется использовать синтаксис, как это предлагается с помощью команды.

+0

Отличный ответ, но на самом деле это не решает проблему, к сожалению. 'echo 'echo% VS140COMNTOOLS%" 'производит' "echo C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ Tools \" '. –

+0

Это очень странно. Я предлагаю использовать бесплатный инструмент [Process Monitor] (https://technet.microsoft.com/en-us/sysinternals/processmonitor) из Sysinterals (Microsoft) с фильтром, установленным в __Path, содержит dbghelp.dll__, затем __Include__, запустите команду __xcopy__ с ссылкой на переменную окружения и посмотреть журнал мониторинга процесса на действия файловой системы. – Mofi

+0

Ну, это было весело. Просто случается так, что я использую PowerShell в качестве моего ежедневного терминала, и моя команда не работает. Но он работает в cmd.exe. Это на Windows 10. –

Смежные вопросы