-1

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

Вот сценарий. Я пытаюсь понять, как robocopy использует имена путей с пробелами внутри.
Эхо и пауза есть только для устранения неполадок.

@echo on
set origin= %1
set destination= "%~dp1"
echo %origin%
echo %destination%
pause
robocopy %origin% %destiny% /E /MOVE /R:2 /ETA
pause

1 ответ1

0

Вы не инкапсулируете путь в кавычках в команде set , это нужно делать только при попытке использовать переменную в команде.

set видит все это как строку и не заботится о пробелах, тогда как команда robocopy будет видеть пробелы (когда раскрыто %foo% ) как разделители параметров.

Любой путь к файлу, который вы передаете в пакетный файл, необходимо будет заключать в кавычки при вызове пакетного файла (в противном случае пробелы будут разбивать путь на несколько параметров), поэтому, чтобы избежать одних кавычек, а других нет, вы можете использовать %~1 Форма для удаления цитат.

Однако в опубликованном сценарии есть один недостаток: если переданный исходный путь (т. Е. %1) имеет завершающий символ \ , то %~dp1 оценивает тот же путь, что и %1 а не родительский.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .