
Preciso de um arquivo em lote que receba dois parâmetros: um comando (nome do arquivo com alguns argumentos) e um caminho para um arquivo - para redirecionamento de saída da execução do comando. Tentei algumas variantes como call %1 > %2
, start %1 > %2
no arquivo 'q.cmd', chamando como q "echo test" "log.txt"
e q 'echo test' 'log.txt'
e %1
ou call %1
com q "echo test > log.txt"
, mas nada funciona. Eu também tentei ^
antes >
. Na maioria dos casos ele imprime " 'echo não é reconhecido como uma vírgula interna ou externa..." ou algo assim e às vezes cria 123.txt vazio ou com algumas linhas de serviço, mas não com "teste" como eu preciso. Como posso resolver o problema?
Responder1
q "echo test" "log.txt"
estaria alimentando dois parâmetros.
"echo test" seria por si só, e não é mais "Echo" seguido de "test" como argumento para Echo, mas sim um único comando chamado "echo test", que é inválido.
Você precisa separar os argumentos dos comandos, e realmente o script em lote NÃO é a melhor maneira de fazer isso, especialmente se você deseja uma quantidade dinâmica de argumentos. Procure usar o PowerShell.
Dito isto, se você quiser algo simples, não tão flexível e ainda assim um arquivo em lote, talvez tente o seguinte em seu arquivo em lote:
%2 %3 > %1
.
Em seguida, basta especificar primeiro o arquivo de saída, seguido do comando, seguido do argumento que deseja usar com esse comando.
Ou seja: q log.txt echo Test
, ou q log.txt echo "string with spaces to echo"
.
Isso funciona para mim. :)