Limitação do Windows ao comprimento dos parâmetros da linha de comandos

2

program.exe file1 file2 ... file10000 não vai funcionar.

O Windows tem uma limitação estranha ao tamanho dos parâmetros da linha de comando. É algo entre 32683 e 32853 caracteres. Existe alguma outra maneira de passar parâmetros?

Shyman
fonte
4
Adivinhar que o limite máximo de caracteres é 32.767 (valor máximo de um inteiro de 16 bits com sinal). Não faço ideia se existe outra maneira de passar parâmetros, mas se você escreveu o programa, não seria melhor passar o nome do diretório como parâmetro?
John H
@johnh, sim, essa é a maneira correta de fazer isso. No entanto, o meu program.exenão permite dirs. Além disso, não posso passar parâmetros por partes (1-1000 primeiro, 1001-2000 segundo etc). E, mais importante, não possuo código-fonte para modificá-lo.
Shyman
2
O que este programa faz? Talvez existam alternativas que funcionem.
MBraedley
@ShyMan Sim, poderíamos usar mais algumas informações aqui. Eu realmente quero sugerir o uso de um arquivo em lote para isso, mas seu comentário sobre não conseguir passar os parâmetros em grupos significa que provavelmente não é uma opção. Então eu acho que a pergunta que eu tenho é, por que você não pode passar os parâmetros em grupos? Não é realmente possível coletar a saída de cada grupo e, em seguida, agrupar essa saída para criar o resultado desejado?
John H
1
Eu estou supondo que o programa não pode puxar os parâmetros de um arquivo de texto ou algo assim?
Iszi

Respostas:

1

A solução mais prática é fazer com que seu fornecedor conserte o programa.

Caso contrário, seria possível (embora não fácil) ligar a função GetCommandLine para que ela retornasse uma cadeia de comprimento arbitrário, embora isso possa causar a falha do programa, dependendo de como ele processa a linha de comando.

Harry Johnston
fonte
0

P: "Existe alguma outra maneira de passar parâmetros"

A: Sim, passe em um único arquivo de configuração. Faça o seu programa ler o arquivo de configuração para obter todos os parâmetros.

Por exemplo:

========= Start of "C:\MyConfigFile.txt" =========
    file1
    file2
    ...
    file10000
=================== End of File ==================

Seu comando:

program.exe "C:\MyConfigFile.txt"
Lakey
fonte