2015-01-23 3 views
4

Я пытаюсь передать путь к пакетному файлу из другой программы. Другая программа использует BASIC, поскольку это язык сценариев.Передача пути с '&' в пакетный файл

Итак, я вызываю командный файл с помощью команды Shell().

В командной строке я пытаюсь передать путь, который имеет символ «&». Однако к тому времени, когда он попадает в командный файл, командный файл рассматривает & как своего рода escape-последовательность (я думаю).

Например:

Путь: C: \ Documents \ R & D \ Files

Shell("runscript.bat "C:\Documents\R&D\Files"") 

В пакетном файле:

variable=~1 
echo %variable% 

Я получаю следующий вывод:

C: Документы \ R

UPDATE

Однако, если я использую этот путь C: \ Documents \ RD \ Files

Этот путь придет через поиск и эхо напечатает:

C: \ Documents \ RD \ Files

ответ

3

Я полагаю, вы хотите использовать переменную без кавычек (вшита в кавычки не вызовет у вас никаких проблем) .Затем вам необходимо замедленное разложение (и доступ к переменной с ! вместо %):

set "variable=%~1" 
echo "%variable%" 
setlocal enableDelayedExpansion 
echo !variable! 

Здесь я предполагаю, что первый аргумент является то, что содержит &

Другой вариант for /f:

for /f %%a in ("%~1") do echo %%a 
+0

Первым аргументом будет C: \ Documents \ R & D \ Files. – user2970916

+0

@ user2970916 - затем проверьте приведенный выше код и посмотрите, соответствует ли он вашим потребностям. Dont не подделал аргумент в двойных кавычках. – npocmaka

+0

Это сработало! Благодарю. Я постараюсь понять, могу ли я понять, почему это работает. – user2970916

0

Windows позволяет использовать ^, чтобы избежать появления nex t в строке. Попробуйте R^&D, как показано ниже:.

C:\Users\Thomas>echo R^&D 
R&D 
Смежные вопросы