Ir ao conteúdo

Comando SYSTEM com mais de uma linha


Michel.

Posts recomendados

Postado

Bom, estou iniciando agora, e essa dúvida é bem simples, mais pra quem está querendo descobrir sozinho é dose...

Tenho o seguinte código compilado no Dev C++

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
[B][COLOR="Red"] system("
REG QUERY 'HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion' /v 'ProductName' | FINDSTR '7' >nul
IF ERRORLEVEL 1 goto ERROR
IF NOT ERRORLEVEL 1 goto QUERYDT");[/COLOR][/B]
return EXIT_SUCCESS;
}

Sempre dá erro de sintaxe

Bom, dá pra "injetar" no CMD (SYSTEM) mais de uma linha?, porque não tenho experiência com C++ e estou apenas com o script

Obrigado...

Postado

Bom dia Michel!

Você conhece bastante de arquivo em lotes (batch) ?

Dentro do seu comando system existem rótulos não apresentados, no restante do código: QUERYDT e ERROR...

Existem alguns problemas de tentar simplesmente copiar um bat e jogar-lo dentro da função system()

O jeito mais fácil é você criar um .bat a partir do dev, e executá-lo de uma vez, exemplo:

#include <stdio.h>

#include <stdlib.h>

FILE * file; // declara variável para o arquivo

file=fopen("seubatch.bat","w"); // abre o arquivo seubatch.bat como escrita

fprintf(file,"@echo off\n");

fprintf(file,"echo. Ola mundo");

fprintf(file,"pause");

fclose(file);

system("seubatch.bat");

++++++++++++++++++++++++++++++++++++++++++++++++++++

Você também pode inserir outros comandos no mesmo system utilizando o caracter especial &, exemplo:

system("dir /b *.cpp & echo. errorlevel ‚ %errorlevel% & pause");

mas nesse caso se for copiado de um batch, ele pode não funcionar do jeito previsto, por vários motivos... citarei alguns:

1. no prompt ao se utilizar um for utiliza-se apenas um %, já no batch é necessário dois % ( ou seja %a no prompt equivale a %%a no batch )

2. Os rótulos não são identificados ao se utilizar a função system()

( exemplo goto :error)

3. as vezes ao se utilizar um IF ou um FOR, dependendo do caso é importante que eles estejam em linhas diferentes identificados por paranteses...

----------------------------------------------------------------------

Mas se o batch não utilizar comandos de condição, e apenas executarem uma sequencia de comandos na ordem que você quer, você poderá usa-los em diversos system, exemplo:

system("reg query HKCU");

system("dir /b *.exe");

system("echo. Digite algo para sair ... ");

system("pause > nul");

system("Quem abre a mente reduz o mundo [ NeoqJav ] ");

Postado

Opa, obrigado pela atenção

Bom, o meu intuito mesmo, é compilar esse código em c++, é um batch qualquer, mais não queria destribui-lo como se fosswe um open-souce...

bom, lá vai uma parte do código

REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v "ProductName" | FINDSTR "7" >nul
IF ERRORLEVEL 1 goto ERROR
IF NOT ERRORLEVEL 1 goto QUERYDT
)
:QUERYDT
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx >nul
IF NOT ERRORLEVEL 1 goto IADT
IF ERRORLEVEL 1 goto CE
)
:IADT
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx | FINDSTR "86" >nul
IF NOT ERRORLEVEL 1 set ARC=x86&& goto TP
IF ERRORLEVEL 1 goto AMD64DT
)
:AMD64DT
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v BuildLabEx | FINDSTR "64" >nul
IF NOT ERRORLEVEL 1 set ARC=x64&& goto TP
IF ERRORLEVEL 1 goto CE
)
:TP
md "%TEMP%\13645.tmp"
IF ERRORLEVEL 1 GOTO MERROR
IF NOT ERRORLEVEL 1 rd "%TEMP%\13645.tmp"&& goto DETECTION
)
:DETECTION
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find /i "Enterprise" >nul
IF NOT ERRORLEVEL 1 goto ENT
)
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find /i "Ultimate" >nul
IF NOT ERRORLEVEL 1 goto ULT
)
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find /i "Professional" >nul
IF NOT ERRORLEVEL 1 goto PRO
)
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find /i "Home Premium" >nul
IF NOT ERRORLEVEL 1 goto HP
)
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find /i "Home Basic" >nul
IF NOT ERRORLEVEL 1 goto HB
)
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName | find /i "Starter" >nul
IF NOT ERRORLEVEL 1 goto STA
IF ERRORLEVEL 1 goto UND
)

Meu intuito, era injeta-lo diretamente ao cmd.exe, já que não quero distribui-lo

Tem alguma forma de transformar o ambiente C++ em CMD e trabalhar com o código dentro dele?

Obrigado...

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!