Используйте CreateProcess для запуска bat с пробелами
В документации CreateProcess говорится, что для запуска командного файла необходимо использовать cmd.exe /C <path to bat>
, На самом деле он может нормально запускать пакетные файлы, если путь к скрипту не содержит пробелов (Microsoft подтверждает это в описании уязвимости MS14-019). Интересно, возможно ли избежать пробелов в пути к пакетному файлу, чтобы заставить CreateProcess работать. Добавление кавычек не помогает, CreateProcess завершается с ошибкой:
cannot spawn "<path to batch>": No such file or directory
Обновить
Обходной путь - использовать короткие имена файлов, как указано @jac в комментариях. Я все еще удивляюсь, почему включение пути в двойные кавычки работает для обычных исполняемых файлов, но не работает для пакетных файлов.
1 ответ
Для CreateProcess нет экранирующего символа.
Поскольку код поврежден, и вы не можете это исправить, вам придется обойти эту проблему. Например, создайте точку соединения с целевым каталогом и запустите пакетный файл через путь точки соединения или используйте короткие пути, как предложено jac. (Обратите внимание, что не во всех томах обязательно будут включены короткие пути, но если вы имеете дело с системным томом, вероятно, можно с уверенностью предположить, что они будут.)