如何在Windows 10命令行中运行包含空格路径的可执行文件?

14
H:\>"H:\Program Files\R\R-3.4.0beta\bin\R.exe"
'H:\Program' is not recognized as an internal or external command,
operable program or batch file.

H:\>"H:\Progra~1\R\R-3.4.0beta\bin\R.exe"
The system cannot find the path specified.

H:\>H:\Progra~1\R\R-3.4.0beta\bin\R.exe
The system cannot find the path specified.

我尝试在Windows 10上使用"..."Progra~1,但两者都无法正常工作。

我做错了什么?


1
" " 应该可以工作。你应该会得到类似于 '"H:\Program Files\R...."' 不是内部或外部命令,可执行的程序或批处理文件。 的错误提示。我怀疑你输入了错误的双引号。 - stanleyli
第一个问题,它甚至没有识别双引号。第二个和第三个问题的意思是Progra~1不存在。你是从键盘上输入了双引号还是复制粘贴的?这可能是因为它们是非Ascii的双引号。另一个解决方法是在那之前输入start - kurakura88
尝试使用以下命令:start "" "c:\program files",如此建议来自:https://superuser.com/questions/511486/how-to-start-open-a-file-folder-that-contains-space-in-its-name-through-command - SillyPerson
看起来路径是错误的。在命令提示符窗口中运行cmd /?,您可以在最后一页帮助中阅读有关名称补全的内容,只需输入几个字母并按下TAB键,Windows将自动完成剩余部分。此外,通常在系统驱动器上有两个程序文件夹,因此必须执行dir /AD /X %SystemDrive%\Progra*以获取特定程序文件夹的短路径。最后,系统驱动器通常是C:而不是H:。由于我用文本替换了屏幕截图,所以我不确定R-3.4.0beta中是否有0O。它应该是0,但您可能打错了。 - Mofi
2
很可能是r.exe本身的错误。考虑直接运行rterm.exe来绕过这个问题。顺便说一下,现在报告bug也不算晚了。 - Hans Passant
我在Python中遇到了相同的问题:1 YT_DLP_LOCATION = "D:\\Programs\\yt dlp\\yt-dlp.exe" 2 os.system(f"\"{YT_DLP_LOCATION}\" -o \"Downloaded songs/%(title)s - %(channel)s.%(ext)s\" -f bestaudio --extract-audio --audio-format mp3 --audio-quality 0 https://www.youtube.com/watch?v={link}") 打印输出结果是正常的,如果我将输出结果放入CMD中手动操作也可以,但我仍然会得到OP收到的错误。如果我从yt-dlp中删除-o选项(以及目录),它就可以工作了。不确定这是否是Python解释器的错误或者是我的疏忽。 - Kevin Eldurson
3个回答

10

简短回答: 使用 & 'C:\path with spaces\app.exe'

解释: 在PowerShell中输入您的路径,并对包含空格的任何目录使用 TAB 进行自动完成。PowerShell 将自动插入单引号 'bla bla',并且它还会在前面放置一个 &,这是将字符串视为应执行的内容所需的。像往常一样继续完成您的路径。


5

这种方法——我简直不能相信我现在才明白——是使用为非8点3命名文件生成的Windows短名称。要获取相关路径或程序名称,请键入dir /x <path to program>。它将输出类似于PROGRA~1的内容,表示Program Files文件夹。当然,您必须逐个目录进行操作,如果文件/文件夹名称中有多个空格,则会很麻烦。如果您想要格式化为短名称的完整路径,可以执行以下操作:

for %I in (*) do echo %~sI 

例如,如果我要访问的文件是C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\License Terms\License_msodbcsql_ENU.txt,我可以输入:
for %I in ("C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\License Terms\License_msodbcsql_ENU.txt") do echo %~sI

我得到的是简单得多的路径:C:\PROGRA~1\MICROS~2\CLIENT~1\ODBC\170\LICENS~1\LICENS~1.TXT

很烦人的是,如果不使用循环就无法查询整个目录路径,但它就是这样。 对于别名很有用。

也许使用powershell有更简单的方法,但我相当确定从cmd提示符下没有。


2
你可能做错了什么,因为双引号将可执行文件的路径包含在内,包括空格。
为确保正确操作,请开始输入命令路径,并在“F:\Program”之后使用“TAB”键,直到看到正确的路径,在你的情况下它会自动完成。
"F:\Program Files"

使用箭头键回到引号后面并继续路径,然后使用制表符直到到达目标位置。

"H:\Program Files\R\R-3.4.0beta\bin\R.exe"

您也可以尝试使用Start来发出它。
start "H:\Program Files\R\R-3.4.0beta\bin\R.exe"

如果您的cmd窗口打开在实际的系统驱动器上,即“Program Files”所在的位置,您可以运行以下命令,而无需添加驱动器号:
".\Program Files\R\R-3.4.0beta\bin\R.exe"

或者将其添加到您的环境变量中,然后只需输入路径即可执行:

R.exe

7
这在Windows 10中真的是坏掉了。引用可执行文件路径,绝对存在,只会返回文件未找到,而不是执行可执行文件。 - Triynko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接