A bandeira / B é o que você está procurando. Os seguintes trabalhos (pelo menos no Windows 10):
start /HIGH /B my_little_proggy.exe > output.txt
Como posso iniciar um processo com alta prioridade e ainda redirecionar sua saída padrão (stdout) para um arquivo ao mesmo tempo?
Isso não funciona:
start /HIGH my_little_proggy.exe > output.txt
A bandeira / B é o que você está procurando. Os seguintes trabalhos (pelo menos no Windows 10):
start /HIGH /B my_little_proggy.exe > output.txt
[EDIT # 2 - correção principal] Como apontado por @ TarnayKálmán (OP) em um comentário, o shell não inicia processos filho em seu próprio nível de prioridade, mas sim na prioridade normal padrão. No nível da API, o cmd parece estar chamando CreateProcess sem definir PRIORITY_CLASS
em dwCreationFlags
(em vez de passar seu próprio GetPriority()
) que faz com que o processo filho seja executado no padrão NORMAL_PRIORITY_CLASS
.
Como conseqüência, comandos como start /HIGH call my_little_proggy.exe ^> output.txt
iniciarão um shell cmd.exe secundário com prioridade alta , que por sua vez manipulará o redirecionamento e executará my_little_proggy.exe
- mas executará na prioridade normal . Por causa disso, a postagem a seguir não responde à pergunta original de redirecionar a saída quando start /HIGH
.
Eu editei a opção /HIGH
do meu post anterior e deixei o restante abaixo, pois as técnicas funcionam para start
em geral, e alguém pode achar isso útil.
Do jeito que está escrito, o redirecionamento >
se aplica ao comando start
, não ao comando que start
executa (no seu exemplo, my_little_proggy.exe
). Isso também explica por que start /B
funciona, já que o processo filho compartilha o mesmo console (supondo que my_little_proggy.exe
também seja um aplicativo de console).
Para redirecionar a saída do comando start
'ed, você precisa (a) executar o comando por meio de um shell secundário ( cmd /c
ou simplesmente call
) e (b) escapar do >
para que ele não seja interpretado como um caractere especial / de redirecionamento pela linha start
, mas seja preservado e transmitido para o shell filho que executa my_little_proggy.exe
. Qualquer um dos seguintes deve fazer isso (observe o ^>
).
start call my_little_proggy.exe ^> output.txt
start cmd /c my_little_proggy.exe ^> output.txt
[EDIT # 1] Adicionada a exigência
call
ou cmd /c
no parágrafo acima. A razão é que o redirecionamento de saída >
é tratado pelo interpretador de linha de comando, não pelo próprio programa de destino, portanto, para funcionar o destino my_little_proggy.exe
deve ser iniciado por um shell de comando, ao invés de ser executado diretamente .