Questão Fazendo o lote para executar o Windows PowerShell e, em seguida, execute algum texto


Eu sou mais novo para fazer arquivos em lote. Eu estou tentando executar um comando que irá abrir o Windows PowerShell em um diretório específico e, em seguida, uma vez lá para executar um comando.

Até agora eu tenho o seguinte. Powershell.exe -noexit -command "cd 'c:\Dev\ProductDev'" Isso parece funcionar ao abrir o PowerShell no local correto, mas não consigo executá-lo para executar o comando node sp.

Eu tentei o seguinte sem sucesso PowerShell -NoExit -Command "Write-Host 'node sp'"

Além disso, é possível ter o Windows PowerShell aberto na tela azul, e não na janela CMD (preto / branco)?


2


origem


Não sei por que você não escreveria o roteiro em Powershell? - EBGreen
@EBGreen Explain? Desculpe, eu sou novo em escrever scripts em geral. - Austin
Tudo o que estou tentando fazer é criar um atalho ou dois para executar algumas coisas para mim, mas quero ver / visualizá-las na tela do PowerShell em vez de no CMD. - Austin
Se eu entendi, agora você está abrindo um arquivo em um editor de algum tipo (provavelmente notepad) e você está digitando comandos em lote, provavelmente um por linha, em seguida, salvando o arquivo com uma extensão. Assim, fazendo um arquivo em lotes. O Powershell também é uma linguagem de script (e mais versátil que o batch). Você faria algo muito semelhante. Abra um arquivo em um editor, digite os comandos do PowerShell e salve-o como um arquivo .ps1. Há guias por toda a internet para começar a usar o Powershell. - EBGreen
@ EBGreen ohhh não sabia disso. Obrigado! - Austin


Respostas:


Como você não forneceu seu arquivo bat completo, eu acho que é

Powershell.exe -noexit -command "cd 'c:\Dev\ProductDev'"
PowerShell -NoExit -Command "Write-Host 'node sp'"

Esta é a abordagem errada. Você está primeiro começando um Powershell que muda para o diretório fornecido e depois fica aberto. Se você sair desse PowerShell, o arquivo bat iniciará o segundo PowerShell.

Você precisa executar um PowerShell e permitir que ele execute os dois comandos. Uma maneira é

Powershell.exe -noexit -command "cd 'c:\Dev\ProductDev'; Write-Host 'node sp'"

Outra maneira é escrever um arquivo de script do PowerShell como MyScript.ps1 com este conteúdo:

cd 'c:\Dev\ProductDev'
Write-Host 'node sp'

e inicie o PowerShell não dando a ele o comando para executar, mas o script a ser executado (veja também esta e esta Pergunta StackOverflow). Você pode executar este comando diretamente ou colocá-lo em um arquivo bat, ou até usá-lo como o comando para executar em um arquivo lnk:

PowerShell.exe -noexit -ExecutionPolicy Bypass -File "MyScript.ps1"

Um problema com o PowerShell é que, por padrão, ele não executa scripts que não são assinados (criptograficamente). A maneira fácil de resolver isso é a -ExecutionPolicy Bypass parâmetro.


6



Eu vou dar um tiro! Para a segunda parte, rodar o script do powershell, então é um arquivo bat? - Austin
Eu ajustei minha resposta, espero que esteja mais claro agora. O terceiro bloco de código na minha resposta é o conteúdo do novo arquivo de script MyScript.ps1. O quarto (e último) bloco de código é uma linha que você pode inserir diretamente no cmd.exe ou que você pode colocar em um arquivo bat ou que você pode usar como linha de comando em um arquivo lnk. - Werner Henze
OK fixe! Eu fiz o que você disse! Eu coloquei a quarta linha em um morcego com o interior sendo PowerShell.exe -ExecutionPolicy Bypass -File "RunProductDev.ps1", quando eu clico nele, ele abre o CMD por um momento e depois fecha, mas meu RunProductDev.ps1 nunca parece rodar ou abrir. Eles estão apenas sentados na minha área de trabalho agora, então eles estão no mesmo diretório. No ps1 eu tenho cd 'c:\Dev\ProductDev' Write-Host 'node sp' - Austin
Se isso importa, o node sp comando é basicamente um serve para executar um aplicativo, então é um comando constantemente em execução / assistindo até eu sair dele. - Austin
Para depurar, você pode rodar o cmd.exe e rodar o seu test.bat, assim você verá a saída. A razão pela qual o powershell se fecha é que eu esqueci o -noexit. Eu atualizei minha resposta para que ela seja incluída. - Werner Henze