2017-02-08 7 views
0
C:\Program Files\mu-repo>mu 
python: can't open file 'C:\Program': [Errno 2] No such file or directory 


C:\Program Files\mu-repo>cat mu.bat 
@echo off 
python %~dp0\mu %* 

Когда я изменяю mu.bat иметь абсолютное имя пути mu.bat, пакетный файл можно найти:Deal с пространством в имени пути в ЦМД

C:\Program Files\mu-repo>cat mu.bat 
@echo off 
python "C:\Program Files\mu-repo"\mu %* 

C:\Program Files\mu-repo>mu 
Commands: 

* mu register repo1 repo2: Registers repo1 and repo2 to be tracked. 
* mu register --all: Registers all subdirs with .git (non-recursive). 

Как я могу продолжать использовать %~dp0, не заменяя его с абсолютным путем?

Спасибо.

+0

заключите трактов/имена файлов в двойные кавычки: ' "% ~ DP0"', Mabe даже ' "% *"' – Stephan

+1

и * пожалуйста * приложить весь путь \ имя файла, а не только часть его: 'питона "C: \ Program Files \ mu-repo \ mu.bat"% * 'или' python "% ~ dp0mu.bat"% * ' – Stephan

+1

' python '% ~ dp0mu "% *' (обратите внимание, что '% ~ dp0' уже закончил '' 'самостоятельно. – aschipfl

ответ

1

Изменить mu.bat на следующее:

@echo off 
python "%~dpn0" %* 
  • вмещающих "..." гарантирует, что путь признается в качестве единственного аргумента, даже если он содержит пробелы.

  • Обратите внимание, что я добавил n к %~dp0, который добавляет пакетный файл по имени файла корень (имя файла без расширения) - mu, в данном случае - к полученному пути, в результате чего C:\Program Files\mu-repo\mu в целом.

Несколько отступлений:

  • Синтаксис выражений, таких как %~dp0 - модифицированная ссылка на %0, который содержит путь к пакетному файлу в вызове - объясняется при запуске help call.
    Как aschipfl указывает на комментарий, вопрос d часть расширяется до пути к каталогу включая a trailing \, так что нет необходимости добавлять его.

  • У не двойной кавычки %* ("%*"), чтобы передать все аргументы через, как это приводит к другой командной строки - просто использовать %* как есть (без кавычек).

  • Допускается до смеси двухцилиндровых и некотируемых частей в одном аргументе; учитывая, что mu сам по себе не нуждается в двойном цикле, оба будут работать "%~dp0"mu и "%~dp0mu".

 Смежные вопросы

  • Нет связанных вопросов^_^