没有明显的原因,在一个非常基本的脚本中,“input行太长”错误

以下脚本

cmd /C ""set PATH=nasm\;%PATH%" & "echo %PATH%"" 

只打印这个:

 The input line is too long. The input line is too long. 

为什么? 我怎样才能解决这个问题?

PS这工作:

 cmd /C "echo %PATH%" 

这不是:

 cmd /C ""echo %PATH%"" 

使用两个双引号"" ,cmd.exe需要一个命令。
但是一个命令有250个字符的限制。

但是你不需要命令echo C:\windows\...
而你的set path=... & echo %path%不能工作,因为百分比的扩展是在该行执行之前完成的。

这一个应该工作

 cmd /v:on /C "set PATH=nasm\;%PATH% & echo ^!PATH^!" 

但我看不出有什么理由不使用代码块,也许使用setlocal

 ( setlocal EnableDelayedExpansion "%VS120COMNTOOLS%..\..\VC\bin\vcvars32.bat" set "PATH=nasm\;%PATH%" echo !PATH! endlocal ) 

如果你真的需要使用cmd /c那么它也可以包含引号,但不能覆盖多个命令

 cmd /v:on /C ""%VS120COMNTOOLS%..\..\VC\bin\vcvars32.bat" & set PATH=nasm\;%PATH% & echo ^!PATH^!" 

OP的问题与我的略有不同,但我也有一个非常基本的脚本中The input line is too long错误没有明显的原因。

在我的情况下,不明显的原因是我之前通过递归地设置我的路径,直到它超过了允许的大小,然后在尝试诊断错误之前解决了问题,从而损坏了我的环境。

在这种情况下重新启动命令提示符就足以获得新的路径。

为了测试你是否可以做这样的事情,只需通过运行没有参数的set显示你的环境变量。 在我的情况下,它显示了递归设置的路径(比这里显示的要长得多,但是你看到了重复的部分):

 C:\dev_build>set ... Path=C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;... ... 

任何进一步的尝试任何东西都给了我The input line is too long

您正在命中8,192个字符的命令行长度限制。