"输入行太长"错误在一个非常基本的脚本中没有明显的原因

Vio*_*ffe 4 windows command-line batch-file

以下脚本

cmd /C ""set PATH=nasm\;%PATH%" & "echo %PATH%""
Run Code Online (Sandbox Code Playgroud)

只打印这个:

The input line is too long.
The input line is too long.
Run Code Online (Sandbox Code Playgroud)

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

PS这适用:

cmd /C "echo %PATH%"
Run Code Online (Sandbox Code Playgroud)

而这不是:

cmd /C ""echo %PATH%""
Run Code Online (Sandbox Code Playgroud)

sag*_*age 7

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;...
...
Run Code Online (Sandbox Code Playgroud)

任何进一步尝试对Path做任何事情都给了我 The input line is too long


jeb*_*jeb 5

使用两个双引号时"",cmd.exe 需要单个命令。
但命令的限制为 ~250 个字符。

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

这个应该可以

cmd /v:on /C "set PATH=nasm\;%PATH% & echo ^!PATH^!"
Run Code Online (Sandbox Code Playgroud)

但我看不出你不使用代码块的任何原因,也许使用 setlocal

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

如果您确实需要使用cmd /c,那么它也可以包含引号,但不能包含多个命令

cmd /v:on /C ""%VS120COMNTOOLS%..\..\VC\bin\vcvars32.bat" & set PATH=nasm\;%PATH% & echo ^!PATH^!"
Run Code Online (Sandbox Code Playgroud)