Respostas:
Se o aplicativo Java não terminar (por exemplo, você estiver usando o arquivo em lotes para iniciar o aplicativo Java), use o start
comando para iniciá-lo: -
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
Isso iniciará o aplicativo java e continuará executando o arquivo em lotes sem aguardar a conclusão do aplicativo java.
Explicação:
Aqui está como isso funciona; um arquivo em lotes é processado uma linha por vez. Cada comando é executado por sua vez e o processador em lote aguarda a conclusão de um comando antes de iniciar o próximo. O problema que você está enfrentando é porque o aplicativo Java que você está iniciando (Jilko.jar) é um programa em janela que continua em execução mesmo após a linha que o inicia. Se fosse uma ferramenta que executa alguma ação e termina, o arquivo em lotes continuará no próximo comando (ou sairá se não houver mais). Como o programa ainda está em execução, o processador em lote espera até que a janela seja fechada antes de prosseguir. Você pode ver isso em ação saindo do programa Java: a janela do console com o arquivo em lotes é fechada.
Solução:
O que você precisa fazer para corrigi-lo é instruir o processador em lote a iniciar o programa e continuar sem esperar:
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
Como Terrance mencionou , ""
é o título a ser usado na janela do console. No entanto, é opcional apenas se o comando não estiver entre aspas; caso contrário, é necessário . Você pode colocar algo lá se quiser ou deixá-lo vazio, mas se o comando estiver entre aspas, ele deve estar presente; caso contrário, o interpretador de comandos tratará o comando citado como o título e abrirá um console que fica lá esperando por algo para fazer.
Você pode usar algo como o seguinte comando, mas as aspas são apenas mais fáceis e seguras, já que não é garantido que nomes curtos sejam iguais em todos os sistemas.
start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar
O start
comando é um comando interno que gera um processo (basicamente como executar um programa no menu Iniciar). Portanto, o que acontece nesse contexto é que o processador em lote executa o start
comando que, por sua vez, executa o programa especificado e finaliza (ele próprio, não o programa gerado). Como tal, o processador em lote continua conforme o esperado. Ele também possui algumas opções que podem ser úteis, como executar o programa minimized ( /min
) ou maximized ( /max
), executá-lo em baixa prioridade ( /low
) e assim por diante. Veja start /?
para detalhes.
Descobri que alguns dos programas iniciados deixam os processos em execução e a janela do console não fecha até que sejam finalizados se eu apenas executá-los iniciando o executável.
O programa START corrige isso, mas o antigo problema com o START ainda existe. Você não pode simplesmente usar:
START "c:\my dir\myfile.exe"
O primeiro parâmetro de START ainda é o nome da janela. Se você omitir, basta abrir uma caixa de console CMD com a janela com o nome que você tentou iniciar. Na instância acima, agora eu teria uma janela do console com o título da janela " c: \ my dir \ myfile.exe ". Não é o que eu queria!
Para omitir o nome da janela, use um par de aspas duplas para definir uma sequência vazia, como:
START "" "c:\my dir\myfile.exe"
Por fim, encerre seu arquivo em lotes com um comando EXIT para garantir que ele seja fechado.
Este método parece funcionar consistentemente no Windows 7 e 8.
Para solução de problemas, acho que adicionar um ECHO do que estou prestes a fazer, e um TEMPO LIMITADO do que acabei de fazer, ajuda muito. Por exemplo:
ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5
Como o Timeout fornece uma contagem regressiva, você não precisa ECO que está prestes a atrasar.
Além disso - use EXIT o tempo todo, no Windows 7, pois apenas chegar ao final do arquivo em lotes não o encerra necessariamente - como nas versões anteriores do Windows. O Windows 7 pode ser mais sensível a isso do que as versões anteriores do NT (por exemplo, Windows 2000 Professional). Isso foi mencionado em algumas, mas não em todas as respostas anteriores.
Detalhes da experiência pessoal para apoiar a resposta:
Depois de transferir uma instalação do StarOffice5.2 do Windows 2000 para o Windows 7, eu estava recebendo erros de espaço na memória ao encerrar o pacote. Isso não foi visto no Windows 2000.
Anos atrás, eu havia gravado arquivos em lote para fazer backup e restaurar automaticamente o soffice.ini, para permitir um reparo quando ele for corrompido (com frequência suficiente para ser um problema - o conjunto falha ao carregar). O backup automático (acionado por um link para o arquivo em lotes, colocado em Office52 \ user \ config \ startup) ocorre apenas após um atraso de 5 segundos. Percebi que sempre que saía do conjunto pouco antes da execução do arquivo em lotes, o término do conjunto era sem erros. Isso me indicou um problema nos arquivos em lotes.
Depois que o comando 'EXIT' foi colocado como a última linha nos arquivos em lotes, o conjunto de escritórios começou a terminar sem mensagens de erro de espaço em memória, o tempo todo, independentemente de os Arquivos em Lote terem sido executados ou não.
Eu estava apenas lidando com o mesmo problema, e ele finalmente se resolveu depois de fazer o que parecia ser uma mudança aleatória no arquivo de lote - não entendo o porquê, mas vou publicá-lo aqui, caso ajude alguém mais tarde.
Faço uso do utilitário SysInternals Pskill e do utilitário sleep , pois o XP Home não inclui muito em termos de funcionalidade da linha de comando.
Este é o arquivo em lotes que realmente fecha após a conclusão:
@echo off
start /min C:\Progra~1\PsTools\pskill.exe explorer.exe
start /min C:\Progra~1\PsTools\pskill.exe Powermenu.exe
start /min C:\Progra~1\PsTools\pskill.exe PWGen.exe
start /min C:\Progra~1\PsTools\pskill.exe redshiftgui.exe
start /min C:\Progra~1\PsTools\pskill.exe clipx.exe
sleep 2
start explorer.exe
sleep 3
start C:\Progra~1\ClipX\clipx.exe
sleep 1
start C:\Progra~1\Powermenu\PowerMenu.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
start C:\Progra~1\RedshiftGUI\redshiftgui.exe && exit
Se eu tivesse as últimas linhas alteradas assim, a janela cmd permaneceria aberta até eu clicar no 'X' no canto:
start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe && exit
Mesmo quando eu tentava invocar o pskill para se matar, o processo cmd.exe desaparecia do Gerenciador de Tarefas, e o pskill informava de dentro do cmd.exe que o processo cmd.exe havia sido morto, mas a cmd.exe
janela ainda permaneceria até Cliquei no 'X' no canto:
start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
C:\Progra~1\PsTools\pskill.exe cmd.exe
Depois que adicionei && exit
todas as linhas, notei que algumas delas responderam e interromperiam o processamento em lote - enquanto outras não.
Então, eu apenas coloquei um dos responsivos no final, em vez de como eu o tinha originalmente.
Como eu disse, não sei por que, mas estou feliz que isso acabou.
experimentar:
cmd /c "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
O Windows 2003 não possui "Contas de Usuário" no Painel de Controle por padrão. Escrevi um pequeno lote para abrir Contas de Usuário:
@echo off
rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll
exit
Funcionou bem, as contas de usuário foram abertas, mas a janela do CMD também permaneceu aberta. Depois de algumas pesquisas aqui, eu adicionei: START "" ao início da linha 2 da seguinte forma:
@echo off
Start "" rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll o
exit
Agora a janela Contas de usuário é aberta, permanece aberta e a janela CMD é fechada. Mole-mole.
Criei um arquivo em lotes de uso líquido em uma máquina Windows 32 de 32 bits e o cmd do arquivo em lotes não será encerrado após a execução. Eu executo o mesmo arquivo em lotes em outra máquina Windows 64 de 64 bits e o cmd do arquivo em lotes é encerrado normalmente.
Tentei a sugestão de Bryan e ele não funciona nessa máquina com Windows 7 de 32 bits porque não havia nenhum processo conhost.exe, então a modifiquei da seguinte maneira:
Taskkill /IM cmd.exe /F
O arquivo em lote de uso líquido nem sempre sai normalmente e mostra a confirmação "Terminar trabalho em lotes (S / N)" aleatoriamente .
De acordo com esse segmento , modifiquei o arquivo em lotes da seguinte maneira:
@echo off
if "%~1"=="-FIXED_CTRL_C" (
REM Remove the -FIXED_CTRL_C parameter
SHIFT
) ELSE (
REM Run the batch with <NUL and -FIXED_CTRL_C
CALL <NUL %0 -FIXED_CTRL_C %*
GOTO :EOF
)
net use \\Server\folder
Taskkill /IM cmd.exe /F
O arquivo em lote net use eventualmente sai normalmente.
nohup
en.wikipedia.org/wiki/Nohup