Qual é a diferença entre os seguintes scripts cmd?

10

Eu tentei iniciar vários programas através de um arquivo em lotes e encontrei problemas, mas isso já aconteceu no passado.

Sou relativamente novo em scripts e linhas de comando e essa seria a minha pergunta: Qual é a diferença entre os seguintes scripts cmd?

Este é aceito

Start Chrome

(suponho aqui que alguns programas instalados sejam reconhecidos por título, mesmo que o diretório não esteja onde o chrome.exe ainda é iniciado, as chaves do registro desempenham um papel nisso?)

esse também funciona

cd "FOO_DIR"
start FOO.exe

no entanto, estes não

start "FOO_DIR\FOO.exe"

(abre uma nova janela sem iniciar o FOO.exe)

start /B "FOO_DIR\FOO.exe"

(escreve o texto com direitos autorais novamente e não faz mais nada)

(SO Windows 7 x64)

Senhor Smith
fonte

Respostas:

17
Start Chrome

Este funciona, porque o executável do Chrome está localizado em uma pasta que está na PATHvariável de ambiente. startprocura por programas em todas as pastas nessa variável. A variável de ambiente PATHEXTcontém uma lista de extensões de arquivo a serem procuradas e, como .exeestá contida por padrão, você não precisa escrever chrome.exe.


start "FOO_DIR\FOO.exe"

Isso não funciona, porque startusará seu primeiro argumento como o título da janela, se for citado. Portanto, isso abrirá um novo CMD com "FOO_DIR\FOO.exe"o título.

Para contornar isso, você pode simplesmente adicionar um argumento de título vazio antes do seu comando:

start "" "FOO_DIR\FOO.exe"
crater2150
fonte
Além disso, AFAIR, o título é obrigatório ao lançar executáveis com de linha de comando
abstrask
1
Não é que startespera um título como seu primeiro argumento (caso contrário start chromenão funcionaria), é que, se seu primeiro argumento for citado, ele espera que seja um título.
jamesdlin
@ Jamesdlin ah, a documentação sobre isso é um pouco vaga, obrigado. Eu editei a resposta nesse sentido
crater2150
5

Tente adicionar "title"ou pelo menos ""depois startdesta forma:

start "title" "FOO_DIR\FOO.exe"

ou

start "title" /B  "FOO_DIR\FOO.exe"

A causa raiz do problema é que o primeiro argumento entre "" aspas é interpretado como um titleparâmetro para nova cmdjanela.

Também ajuda a olhar para a referência de comando (link)

Art Gertner
fonte
Obrigado, isso esclareceu a diferença. E com o primeiro, acho que "arquivos não executáveis ​​podem ser invocados por meio de sua associação de arquivos apenas digitando o nome do arquivo como um comando". é a razão pela qual apenas o nome é o suficiente ... (não tenho certeza embora)
Mr. Smith
Se você está falando do seu primeiro exemplo start chrome, acredito que chamar o chrome funcione, porque ele tem uma entrada no registro em algum lugar aqui: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths Se você procurar pelo chrome.exe, provavelmente encontre a entrada que contém o caminho completo para o executável.
Art Gertner #