2

传递非常长的文件路径时,我的参数被截断。我需要启动一个程序并通过命令参数传递所有内容 - 有时它只是截断命令。它在全球范围内进行 - 所以这不仅是每个参数的问题,而且是整个参数的问题。

编辑:问题可能是monkey_p所说的命令行长度限制。问题是:如何绕过它?(更改工作目录不会做,因为文件可以存在于不同的位置)。

4

2 回答 2

2

我不确定你的问题是什么,但是命令行有一个限制。同样的限制对 Process.Start(command,args) 有效

在运行 Microsoft Windows XP 或更高版本的计算机上,您可以在命令提示符处使用的最大字符串长度为 8191 个字符。在运行 Microsoft Windows 2000 或 Windows NT 4.0 的计算机上,可以在命令提示符处使用的字符串的最大长度为 2047 个字符。

于 2009-07-29T14:47:55.017 回答
1

如何解决限制 要解决限制,请使用以下一种或多种方法(根据您的情况):

  • 修改需要长命令行的程序,使其使用包含参数信息的文件,然后在命令行中包含文件名。

例如,不要在批处理文件中使用 ExecutableFile.exe Parameter1 Parameter2 ...ParameterN 命令行,而是修改程序以使用类似于以下命令行的命令行,其中 ParameterFile 是包含所需参数的文件(参数 1 参数 2 ...参数 N):

ExecutableFile.exe c:\temp\ParameterFile.txt

  • 修改使用大型环境变量的程序,使环境变量包含少于 2047 或 8191 个字符(根据您的操作系统而定)。

例如,如果 PATH 环境变量包含超过 2047 或 8191 个字符(取决于您的操作系统),请使用以下一种或多种方法来减少字符数:

  • 为文件夹和文件使用较短的名称。
  • 减少文件夹树的深度。
  • 将文件存储在更少的文件夹中,以便在 PATH 环境变量中需要更少的文件夹。
  • 研究可用于减少 PATH 对查找 .dll 文件的依赖性的可能方法。

那是来自Microsoft Support,所以对我没有任何帮助 - 似乎这个限制不能增加,也没有办法以任何其他方式运行它......

我将尝试做的是:记住每个文件的路径,将它们移动到某个 DIR,然后运行将 CurrentDirectory 设置为 DIR 的程序并传入文件名,在程序结束后将文件移回它们的位置 -丑,丑,丑,我知道,但是好像没有别的办法了……

于 2009-07-29T18:41:24.500 回答