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

Я пытаюсь запустить пакетный файл, который находится в:

C:\Test Batch\BatchTest.bat

Это скопирует файл из другого указанного местоположения, скажем

C:\Users\UserName\Desktop\Company Downloads\downloadedDoc.doc

Я могу запустить командный файл как:

cmd  /c start "" "C:\Test Batch\TestBatch.bat"

И пакет действительно работает.

Но когда я пытаюсь добавить аргумент для его копирования следующим образом:

cmd  /c start "" "C:\Test Batch\TestBatch.bat" "C:\Users\User Name\Desktop\Company Downloads\downloadedDoc.doc"

Я получаю:

'C:\Test' is not recognized a an internal or external command, operable program or batch file.

В конечном счете командный файл и файл, который нужно скопировать, будут указаны пользователем и, вероятно, будут содержать пробелы в именах или путях. Поэтому простого ответа на использование путей без пробелов будет недостаточно.

Ответы

Ответ 1

Попробуйте изменить каталог запуска с аргументом /d, чтобы начать так:

cmd /c start "" /d"C:\Test Batch\" "TestBatch.bat" "C:\Users\User Name\Desktop\Company Downloads\downloadedDoc.doc"

Команда запуска содержит некоторые синтаксические разборки кавычек.

Ответ 2

Это известная функция cmd.exe, которая запускается start.exe. Это происходит только тогда, когда команда имеет пробел в своем имени или пути и хотя бы один из аргументов цитируется.

Обходным решением является замена команды на call.

start "" CALL "C:\Test Batch\TestBatch.bat" "C:\Users\User Name\down.doc"