Lancer des commandes bat

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Lancer des commandes bat

Message par ChaudEf »

Bonsoir
j'ai une douzaine de commandes batch que je voudrais executer depuis mon programme en purebasic, en general j'ecris tout ca dans un fichier bat que je fourre quelque part dans l'ordinatuer, puis je le lance avec runprogram.
existe-il un moyen plus propre? je voudrais avoir un moyen de lancer ca directement depuis le programme sans passer par un fichier bat.

merci
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lancer des commandes bat

Message par Ar-S »

C'est quoi le soucis avec RunProgram() ? Tu peux tout lancer avec, même une simple page web. Je comprends pas.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Lancer des commandes bat

Message par JohnJohnsonSHERMAN »

Je pense que le probléme n'est pas RunProgram() mais bien de ne pas avoir à créer de fichier batch non?
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Lancer des commandes bat

Message par cage »

Bonjour,

J'utilise des DataSection et des IncludeBinary pour transporter mes fichiers batch dans l'exe.

Code : Tout sélectionner

Procedure makeSomeFiles()
  Protected  addr.i, file.s, leng.l

  DataSection
;;; SCRIPTS
    IB01:
    IncludeBinary "Data\myscript1.cmd"
    IB02:
    IncludeBinary "Data\myscript2.cmd"
  EndDataSection

  Structure ref
    addr.i
    name.s
    size.i
  EndStructure
  
  NewMap files.ref()
  
;;  
;;non-permanent files
;;
  files("1")\addr = ?IB01  
  files("1")\name = TOOLS + "myscript1.cmd"
  files("1")\size = ?IB02 - ?IB01 ; get size of included binary
  ;
  files("2")\addr = ?IB02
  files("2")\name = TOOLS + "myscript2.cmd"
  files("2")\size = ?IB03 - ?IB02 ; get size of included binary
  ;
  ForEach files()
    file = LCase(files()\name)
    ;Debug "key=" + MapKey(files())
    Select Val(MapKey(files()))
      Case 1 To 4
      Default
        If ReadFile(#FileNum, file) : Continue : EndIf ; skip straight to the end of ForEach file()
    EndSelect
    ;Debug "key=" + MapKey(files())
    If CreateFile(1, file)
      addr = files()\addr
      leng = files()\size   ; size of Included Binary
      ;Debug "addr=" + Str(addr)
      ;Debug "size=" + Str(leng)
      WriteData(1, addr, leng)
      CloseFile(1)
    EndIf
  Next
  
  FreeMap(files())
EndProcedure ; makeSomeFiles()
C'est un bout de code nettoyé. Peut-être des erreurs. C'est juste le principe.

J'ai un répertoire data dans lequel je met tous les fichiers a inclure dans l'exe.
Ce peut être des bat, des cmd, des txt ou autre.
Le fichier cmd peut-être extrait dans %TMP% puis exécuté, puis effacé.

Gérard
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: Lancer des commandes bat

Message par ChaudEf »

C'est ce que je fait toujours, je me demandais juste si il n'y avait pas un autre moyen

Merci
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Lancer des commandes bat

Message par cage »

Pour 12 commandes, il est possible d'empiler 12 RunProgram() a la suite avec un Wait pour être sur de ne pas exécuter le deuxième avant que le premier soit terminé.
Le tout, c'est de savoir quelles sont ces 12 commandes et si elles ne dépendent pas l'une de l'autre.
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lancer des commandes bat

Message par Ar-S »

Amis nocture bonsoir ^^
Et dans ces 12 batchs ou peut être seulement quelque uns, tu es sûr que PB ne peux pas faire l'affaire via ses propres commandes ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Lancer des commandes bat

Message par cage »

Peux-tu nous donner un exemple de cette douzaine de commandes.
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Lancer des commandes bat

Message par Mesa »

On peut lancer les commandes une par une avec ce code inspiré de la doc:

Code : Tout sélectionner

Procedure.s PureCommand(Commande$, Invisible=#True)
  Protected CommandConsole, Options, Sortie$
  
  If Invisible=#True
    Options = #PB_Program_Open | #PB_Program_Read | #PB_Program_Hide
  Else
    Options = #PB_Program_Open | #PB_Program_Read 
  EndIf
  
  CommandConsole = RunProgram("cmd.exe", Commande$, "", Options)
  
  If CommandConsole 
    While ProgramRunning(CommandConsole)
      If AvailableProgramOutput(CommandConsole)
        Sortie$ = Sortie$ +  ReadProgramString(CommandConsole) + #CR$
        ;         
      EndIf
    Wend
    Sortie$ + #CR$ + #CR$
    Sortie$ + "Code de retour : " + Str(ProgramExitCode(CommandConsole)) 
    
    CloseProgram(CommandConsole) ; Ferme la connection vers le programme
  EndIf
  ProcedureReturn Sortie$
EndProcedure





MessageRequester("Sortie", PureCommand(" /c ipconfig /all"))
MessageRequester("Sortie", PureCommand(" /?"))
; MessageRequester("Sortie", PureCommand(" /c dir"))
Debug PureCommand(" /c dir")
Mesa.
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Lancer des commandes bat

Message par JohnJohnsonSHERMAN »

Exact, j'allais proposer le même... Grillé :)
Je me demande si ce n'est pas plus pratique d'utiliser WriteProgramString() pour écrire les une aprés les autres les commandes dans CMD ? Ca évite d'en lancer plusieurs instances.
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: Lancer des commandes bat

Message par ChaudEf »

WriteProgramString() avec un seul runprogram ?
Ça marche ?
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Lancer des commandes bat

Message par JohnJohnsonSHERMAN »

Il me semble que oui, puisqu'on écrit juste sur l'entrée standard (stdin), comme une frappe clavier...
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Lancer des commandes bat

Message par Mesa »

Code : Tout sélectionner

;trouvé ici http://purebasic.info/phpBB3ex/viewtopic.php?f=1&t=4449&p=84131&hilit=%23PB_Program_Write#p84131

Procedure.s OemToChar(String.s) 
  OemToChar_(@String, @String) 
  ProcedureReturn String 
EndProcedure

prog = RunProgram("cmd.exe", "", "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Write|#PB_Program_Hide) 
;Delay(200)
If IsProgram(prog) 
  
  WriteProgramStringN(prog, "dir /?") ;WriteProgramStringN(prog, "tracert purebasic.info")
  WriteProgramStringN(prog, "cls")
  WriteProgramStringN(prog, "echo off")
  WriteProgramStringN(prog, "  ")
  WriteProgramStringN(prog, "  ")
  WriteProgramStringN(prog, "  ")
  WriteProgramStringN(prog, "  ")
  WriteProgramStringN(prog, "ipconfig /all")
  WriteProgramStringN(prog, "  ")
  WriteProgramStringN(prog, "  ")
  WriteProgramStringN(prog, "  ")
  WriteProgramStringN(prog, "  ")
  WriteProgramStringN(prog, "date /T")
  WriteProgramStringN(prog, "echo ok")
  WriteProgramStringN(prog, "exit")
  While ProgramRunning(prog)
    If AvailableProgramOutput(prog)
      x=0 
      Answer$=OemToChar(ReadProgramString(prog))
      If Answer$
        Debug Answer$
      EndIf
    EndIf
    Delay(50) ; commentez cette ligne pour aller plus vite
  Wend
EndIf
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: Lancer des commandes bat

Message par ChaudEf »

merci mais ce code n'a pas l'air de marcher

les commandes que je veux lancer sont

Code : Tout sélectionner

sc config dhcp start= disabled
net stop dhcp /y
sc config dnscache start= disabled
net stop dnscache /y
sc config netman start= disabled
net stop netman /y
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Lancer des commandes bat

Message par Ar-S »

Avec le code de mesa et la commande

Code : Tout sélectionner

WriteProgramStringN(prog, "sc config")
ça marche, je n'ai pas essayé la suite car je ne souhaite pas lacer des bidouilles dhcp sur mon pc mais peux tu dire ou ça ne marche pas ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre