Как я могу иметь пробел в введенной пользователем переменной для скрипта bat

Я сделал небольшой bat-файл для создания предварительно созданных папок с именем, введенным пользователем. Он работает нормально, пока пользователь не введет переменную с пробелом. Например, пользователь, вводящий «Джон», создаст папку с подпапками с именем «Джон» (именно то, что нам нужно), однако, если пользователь введет «Смит, Джон», созданная папка будет называться «Смит». Как я могу разрешить скрипту регистрировать введенное пользователем пространство?

Мой код -

@echo off

set /P dest=Enter Name: 
set findest="Z:\ProjectIT\copy\%dest%"

robocopy Z:\ProjectIT\copy\xcopy "%findest

Я понимаю, что это, вероятно, легко исправить, но у меня очень ограниченные знания кода.

Спасибо


person Joshua Patterson    schedule 15.12.2015    source источник
comment
используйте переменную с %findest% - и удалите Quote перед тем, как ваша переменная уже содержит все кавычки, которые ей нужны.   -  person Stephan    schedule 15.12.2015
comment
Позвольте мне порекомендовать использовать синтаксис set "VAR=Value" для всех ваших set команд в целом; это позволяет избежать проблем со специальными символами, но не включает кавычки в Value; поэтому всегда есть одно место, где можно позаботиться об окружающих кавычках — расширение "%VAR%"...   -  person aschipfl    schedule 15.12.2015


Ответы (1)


Настоятельно рекомендуемые предложения от Стефана и aschipfl применяется к вашему коду:

@echo off

set /P "dest=Enter name: "
set "findest=Z:\ProjectIT\copy\%dest%"

%SystemRoot%\System32\robocopy.exe Z:\ProjectIT\copy\xcopy "%findest%"

См., например, ответ на Почему после использования "set var = text" в командной строке не выводится строка с "echo %var%"? для объяснения, почему set "VAR=Value" при присвоении и "%VAR%" при расширении/ссылке настоятельно рекомендуется, даже если строка для присваивания переменной содержит еще 1 кавычки.

Вот также улучшенная версия, которая позволяет вводить строку с двойными кавычками и с заменой каждого / (разделитель каталогов Linux/Mac) на \ (разделитель каталогов Windows) и удаляет последнюю обратную косую черту из пути назначения из-за ROBOCOPY< /strong> интерпретирует одну обратную косую черту в конце пути к каталогу как escape-символ для двойной кавычки:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

:EnterName
set "dest=""
set /P "dest=Enter name: "
set "dest=%dest:"=%"
if not defined dest cls & goto EnterName
set "dest=%dest:/=\%"
if "%dest:~-1%" == "\" set "dest=%dest:~0,-1%"
if not defined dest cls & goto EnterName

set "findest=Z:\ProjectIT\copy\%dest%"

%SystemRoot%\System32\robocopy.exe Z:\ProjectIT\copy\xcopy "%findest%"
endlocal
person Mofi    schedule 15.12.2015