在cmd中处理路径名中的空格
当我将在cmd中处理路径名中的空格,cmd,parameter-passing,Cmd,Parameter Passing,当我将mu.bat更改为绝对路径名为mu.bat时,可以找到批处理文件: 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 %* 如何继续使用%~dp0,而不使用绝对路径名替换它 谢谢。将mu.bat更改
mu.bat
更改为绝对路径名为mu.bat
时,可以找到批处理文件:
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 %*
如何继续使用%~dp0
,而不使用绝对路径名替换它
谢谢。将
mu.bat
更改为以下内容:
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).
- 封闭的
确保路径被识别为单个参数,即使它包含空格“…”
- 请注意,我已将
添加到n
,这将批处理文件的根文件名(不带扩展名的文件名)%~dp0
,在本例中,将其添加到生成的路径中,从而总体上生成mu
C:\Program Files\mu repo\mu
- 表达式的语法,如
-对%~dp0
的修改引用,其中包含调用的批处理文件的路径-在运行%0
帮助调用时解释
正如在对该问题的评论中指出的那样,
部分扩展到目录路径,包括一个尾随的d
,因此不需要附加一个\
- 不要用双引号(
)来传递所有参数,因为这会导致不同的命令行-只需按原样使用(“%*”
)“%*”
- 允许在单个参数中混合使用双引号部分和非引号部分;鉴于
本身不需要双引号,因此mu
和“%~dp0”mu
都可以工作“%~dp0mu”
“%~dp0”
,甚至可能是“%*”
,请将整个路径/文件名,而不仅仅是其中的一部分括起来:python“C:\Program Files\mu repo\mu.bat”%*
或python“%~dp0mu.bat”%*
python“%~dp0mu”%*
(请注意,%~dp0
本身已经被\
结束了)@Stephan:在传递参数时,不要重复引用%*
,它会更改命令行。虽然重复引用整个参数肯定不会有什么坏处,但通常不需要;在这种情况下,它不是。@mklement0:因此我说“可能”-很大程度上取决于需要什么。
@echo off
python "%~dpn0" %*