命令提示符错误'C:\Program'不被识别为内部或外部命令,可执行程序或批处理文件。

67

我正在尝试运行以下批处理命令。该命令已从IDE中提取,因此可以确认它是有效的。但遇到了下面提到的错误。

我已经尝试过一些带有双引号的变体,但它们都没有起作用。 即使在powershell中也有相同的消息。

C:\Program Files\IAR Systems\Embedded Workbench 7.0\430\bin\icc430.exe F:\CP001\source\Meter\Main.c -D Hardware_P20E -D Calibration_code -D _Optical -D _Configuration_TS0382 -o F:\CP001\Temp\C20EO\Obj\ --no_cse --no_unroll --no_inline --no_code_motion --no_tbaa --debug -D__MSP430F425 -e --double=32 --dlib_config C:\Program Files\IAR Systems\Embedded Workbench 7.0\430\lib\dlib\dl430fn.h -Ol --multiplier=16 --segment __data16=DATA16 --segment __data20=DATA20

命令提示符

更新:

尝试使用引号的解决方法会在某种程度上让编译器混淆。

输入图像描述


7
你需要将命令用双引号 " 括起来,否则命令提示符会认为 C:\Program 是要运行的程序,而其余部分是针对该程序的参数。 - Some programmer dude
4
连双引号也不起作用。 - Rohan Sharma
11个回答

57

如果目录名中包含空格,请将其放在引号中。这不仅适用于您调用的程序的参数,也适用于程序本身。

"C:\Program Files\IAR Systems\Embedded Workbench 7.0\430\bin\icc430.exe" "F:\CP001\source\Meter\Main.c" -D Hardware_P20E -D Calibration_code -D _Optical -D _Configuration_TS0382 -o "F:\CP001\Temp\C20EO\Obj\" --no_cse --no_unroll --no_inline --no_code_motion --no_tbaa --debug -D__MSP430F425 -e --double=32 --dlib_config "C:\Program Files\IAR Systems\Embedded Workbench 7.0\430\lib\dlib\dl430fn.h" -Ol --multiplier=16 --segment __data16=DATA16 --segment __data20=DATA20

4
+1是肯定意见,同时参数中如果有空格必须加引号(例如--dlib_config的参数)。 - Adriano Repetti
我尝试了你的解决方案。它不知何故让编译器混淆了。我已经在上面发布了新消息。 - Rohan Sharma

27

你只需要将"Program Files"用双引号括起来,其余命令不需要任何引号。

C:\"Program Files"\IAR Systems\Embedded Workbench 7.0\430\bin\icc430.exe F:\CP00 .....

7
坏的做法。Embedded Workbench 7.0中的空格是怎么回事? - Stephan
@dheerajS 我确实尝试过那个。 - Rohan Sharma
很遗憾,当我尝试在npm的package.json中创建脚本命令时,这是唯一有效的方法。 - CTS_AE
双引号包含完整路径对我不起作用。我正在使用MSSQL执行命令,EXEC xp_cmdshell 'C:"Program Files"\7-Zip\7z.exe a "C:..... - YHTAN

21

这似乎是在处理对命令行非常敏感的程序时偶尔会发生的情况, 但一个解决办法就是使用DOS路径而不是Windows路径。这意味着C:\Program Files\将解析为C:\PROGRA~1\,并通常避免任何空格问题。

要获取短路径,您可以创建一个快速的批处理文件,该文件会回显短路径:

@ECHO OFF
echo %~s1

然后被称为如下:

C:\>shortPath.bat "C:\Program Files"
C:\PROGRA~1

我尝试设置我的PATH变量使用%ProgramFiles(x86)%,但没有成功,因为我猜测它仍然解析到带有空格的路径 - 但是你的解决方案起作用了,最终使用了"PROGRA~2",非常感谢。 - joshcomley
@joshcomley,是的,对于Program Files(x86)请参见https://confluence.atlassian.com/doc/setting-the-java_home-variable-in-windows-8895.html:`Progra~1 ='Program Files'Progra~2 ='Program Files(x86)'`。 - CoolMind

2
尝试在文件路径之前加上 cd。
例如:

C:\Users\user>cd C:\Program Files\MongoDB\Server\4.4\bin


1
如果目录中有空格,请在其周围加上引号。这包括您调用的程序,而不仅仅是参数。
例如:"C:\Program Files\IAR Systems\Embedded Workbench 7.0\430\bin\icc430.exe"
此外 - 在您的项目目录 "${workspaceFolder}" 中有空格可能会使编译器混淆!
至少我的编译器会抛出各种错误(如上所述,但我已经修复了编译器路径),我最终注意到它在 PC 1 上编译(没有空格的目录)并且在 PC 2 上无法编译(有空格的目录)。
实际上不知道应该在哪里放置引号("")才能使其工作,因为${workspaceFolder}${fileDirname} 是 VSC 中预定义变量的引用...

如果您有新的问题,请通过单击提问按钮来提出。如果它有助于提供上下文,请包含此问题的链接。- 来自审核 - Compo

0

我在使用Windows命令行运行R脚本时遇到了类似的问题,即Rscript.exe对路径中的空格非常敏感。解决方法是使用Windows的subst命令创建一个虚拟路径到二进制文件夹。

以下代码会失败:"C:\Program Files\R\R-3.4.0\bin\Rscript.exe"

而以下代码则会成功:

subst Z: "C:\Program Files\R\R-3.4.0"
Z:\bin\Rscript.exe

显然,上述提出的解决方案无法正常工作的原因与 Rscript.exe 可执行文件自身的内部路径解析有关,而不是 Windows 命令行因空格而混淆。因此,在命令行中使用 ~" 解决问题是无意义的。可执行文件必须在不含空格的路径中调用。

0
只需打开文件夹路径并在上面键入cmd,然后按ENTER即可。 输入图像描述

0

你可以通过在第一行输入命令并在下一行调用exe文件来进入文件夹,如下所示。

cd 'c:\program files\....'
.\abc.exe --install service 

0

大多数情况下,问题出在您在.m2存储库中的settings.xml文件中提到的“java home”和“javac”标签的路径上,而不是您的路径变量或Java_Home变量。 如果您检查并更正了这些问题,您应该能够成功执行您的命令。 - Jaihind


-1

我相信James Hunt的答案会解决问题。

@user3731784:在你的新消息中,编译器似乎因为"C:\Program Files\IAR systems\Embedded Workbench 7.0\430\lib\dlib\d1430fn.h"参数而感到困惑。为什么你要在其他编译器开关的中间给出这个头文件呢? 请纠正这个问题并再试一次。 此外,最好在所有编译器开关之后而不是在开头给出源文件名。


该命令已从原始IDE中提取。其中所有的开关都必须被使用,不能忽略任何一个。唯一的问题是-O开关,因为它后面没有空格。其他都可以正常工作。 - Rohan Sharma

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