Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

passer une string dans une commande shell?

16 réponses
Avatar
chris
salut a tous,

je voudrais savoir si il est possible de passer une commande shell a partir
d'une string?

6 réponses

1 2
Avatar
chris
Bonjour et merci à tous

en fait je voudrais faire une application qui génère une commande AT (dos)
pour le planificateur de tâche.


plus précisément un genre de minuterie de magnétoscope pour programmer une
émission TV avec une carte TV

la commande AT.exe :[ORDINATEUR] HEURE [interactive] [/every:date[,....] :
/NEXT:date]]"commande"

voir AT /? sous dos pour plus de détail

donc la commande a passer dans la string sera par exemple :
at.exe19:00:00 /interactive /next:11 "C:program filesMTStart.exe" /record
/chname "France 3" /dur 86 /event "info"

mais comment mettre en string une variable qui contient déjà des doubles
quottes?

si je fais ça :
Dim strCommand As String
strCommand ="at.exe19:00:00 /interactive /next:11 "C:program
filesMTStart.exe" /record /chname "France 3" /dur 86 /event "info""

Call Shell(Environ$("COMSPEC") & " /c " & strCommand, vbHide)

j'ai erreur a la ligne strCommand

est que vous connaissez une commande identique a AT, mais directe?
Avatar
Eric
Euh nan je t'en veux pas lol.
Par contre je ne vois pas pourquoi je ne devrais pas mentionner la
fonction "ShellExecute" qui est bcp plus complète que "Shell".

LE TROLL wrote:
Salut chef :o)
Tu ne reprends que mes réponses, dis donc, tu m'en veux?
Eh, le patron il a dit Shell, alors on répond sur Shell,
pas être plus royaliste que le roi :o)
-------

"Eric" a écrit dans le message de
news:

Euh... et si vous utilisiez la fonction ShellExecute de
l'API, vous croyez pas que vous vous prendriez moins la
tête? :)

Private Declare Function ShellExecute Lib "shell32.dll"
Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal
lpOperation As String, ByVal lpFile As String, ByVal
lpParameters As String, ByVal lpDirectory As String, ByVal
nShowCmd As Long) As Long

Const SW_SHOWNORMAL = 1

Private Sub Form_Load()
ShellExecute Me.hwnd, "open", App.Path & nomFichier,
vbNullString, "C:", SW_SHOWNORMAL
End Sub



LE TROLL wrote:

He, il demande si on peut mettre une variable, c'est sans
doute pas NotePade, c'était juste pour l'exemple...
--------

"ng" a écrit dans le message de news:
%


Salut,



Shell "NotePad.exe" & Chr(34) & App.Path & nomFichier &
Chr(34)



Plus clair et plus rapide, il suffit de doubler les
guillemets :

De plus tu as oublié un espace entre notepad.exe et
l'argument :

Call Shell("NotePad.exe """ & App.Path & nomFichier &
"""", vbNormalFocus)

Et tjrs pareil : attention à App.Path qui ne renvoie pas
tjrs un à la fin !!!

Je conseil de déclarer une variable string strAppPath
publique et de l'initialiser comme suit :

If Right$(App.Path, 1) <> "" Then strAppPath = App.Path
& "" Else strAppPath = App.Path

Comme ca plus de prob :
Call Shell("NotePad.exe """ & strAppPath & nomFichier &
"""", vbNormalFocus)
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Pascal B. wrote:


"LE TROLL" a mal écrit:


x = Shell("NotePad.exe " & App.Path & nomFichier, 1)



Attention:
Cala peut ne pas fonctionner; surtout si il y a des
espaces dans les
chemins (Path) qui pouraient être interprétés comme
séparateurs.
Il vaut mieux entourer chaque paramètre par des
guillemets (code
ASCII 34):

Shell "NotePad.exe" & Chr(34) & App.Path & nomFichier &
Chr(34)

Cordialement,

Pascal B.













Avatar
Pascal B.
"chris" <beynost[nospam]@free.fr> wrote in message news:423195f4$0$30248$

| strCommand ="at.exe19:00:00 /interactive /next:11 "C:program
| filesMTStart.exe" /record /chname "France 3" /dur 86 /event "info""

Salut,

Pour intégrer des quotes (guillemets) dans un texte littéral, il faut les doubler (déjà signalé dans un post précédant), comme ceci:

strCommand ="at.exe19:00:00 /interactive /next:11 ""C:program filesMTStart.exe"" /record /chname ""France 3"" /dur 86 /event
""info"""

Pascal B.

(Pour NG: Tu vois qu'il y a gens qui ne connaissent pas ce principe)
Avatar
LE TROLL
Salut,

T'as peut être même une erreur dans ta chaîne:
"at.exe19:00:00 /interactive /next:11 "C:program
filesMTStart.exe" /record /chname "France 3" /dur 86 /event
"info"

En faisant ainsi tu augmentes les chances de ta chaîne:
"at.exe19:00:00 /interactive /next:11 " & C:program
filesMTStart.exe" & /record /chname & "France 3" & /dur
86 /event & "info"

Sauf que ce qui n'est pas entre parenthèses ne vas pas
fonctionner car il faut que ce soient des variables, et
certains éléments n'ont pas la structure d'une variable "/"

Ta variable chaîne ne peut avoir que de la chaîne (entre
guillemets, ou des guillement eux-même (""")), et ou, des
variables, le tout relié par des "&" ou des "+"
(déconseillé, laissé aux calculs), par exemple.

v=variable, c=chaîne, x=ta variable chaîne
x = "c"
x = v
x = "c" & v
x = v & "c"
x = "c" & v & v & "c" & "c"

Mais tu peux charger ta chaîne par étapes, dès fois c'est
mieux pour la compréhension, par exemple (comme ci-dessus):
x = v
x = x & "c"
Correspond à x = v & "c"
-----------------------------

"chris" <beynost[nospam]@free.fr> a écrit dans le message de
news: 423195f4$0$30248$
Bonjour et merci à tous

en fait je voudrais faire une application qui génère une
commande AT (dos) pour le planificateur de tâche.


plus précisément un genre de minuterie de magnétoscope
pour programmer une émission TV avec une carte TV

la commande AT.exe :[ORDINATEUR] HEURE [interactive]
[/every:date[,....] : /NEXT:date]]"commande"

voir AT /? sous dos pour plus de détail

donc la commande a passer dans la string sera par exemple
:
at.exe19:00:00 /interactive /next:11 "C:program
filesMTStart.exe" /record /chname "France 3" /dur 86
/event "info"

mais comment mettre en string une variable qui contient
déjà des doubles quottes?

si je fais ça :
Dim strCommand As String
strCommand ="at.exe19:00:00 /interactive /next:11
"C:program filesMTStart.exe" /record /chname "France 3"
/dur 86 /event "info""

Call Shell(Environ$("COMSPEC") & " /c " & strCommand,
vbHide)

j'ai erreur a la ligne strCommand

est que vous connaissez une commande identique a AT, mais
directe?





Avatar
LE TROLL
Ouais, ouais, t'a raison de le mentionner, mais comme tu
mettais ça dans ma réponse, lol, (tu répondais à ma
réponse), ben j'ai répondu :o)
------------

"Eric" a écrit dans le message de
news:
Euh nan je t'en veux pas lol.
Par contre je ne vois pas pourquoi je ne devrais pas
mentionner la fonction "ShellExecute" qui est bcp plus
complète que "Shell".

LE TROLL wrote:
Salut chef :o)
Tu ne reprends que mes réponses, dis donc, tu m'en
veux?
Eh, le patron il a dit Shell, alors on répond sur
Shell, pas être plus royaliste que le roi :o)
-------

"Eric" a écrit dans le message
de news:

Euh... et si vous utilisiez la fonction ShellExecute de
l'API, vous croyez pas que vous vous prendriez moins la
tête? :)

Private Declare Function ShellExecute Lib "shell32.dll"
Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal
lpOperation As String, ByVal lpFile As String, ByVal
lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long

Const SW_SHOWNORMAL = 1

Private Sub Form_Load()
ShellExecute Me.hwnd, "open", App.Path & nomFichier,
vbNullString, "C:", SW_SHOWNORMAL
End Sub



LE TROLL wrote:

He, il demande si on peut mettre une variable, c'est
sans doute pas NotePade, c'était juste pour l'exemple...
--------

"ng" a écrit dans le message de news:
%


Salut,



Shell "NotePad.exe" & Chr(34) & App.Path & nomFichier
& Chr(34)



Plus clair et plus rapide, il suffit de doubler les
guillemets :

De plus tu as oublié un espace entre notepad.exe et
l'argument :

Call Shell("NotePad.exe """ & App.Path & nomFichier &
"""", vbNormalFocus)

Et tjrs pareil : attention à App.Path qui ne renvoie
pas tjrs un à la fin !!!

Je conseil de déclarer une variable string strAppPath
publique et de l'initialiser comme suit :

If Right$(App.Path, 1) <> "" Then strAppPath =
App.Path & "" Else strAppPath = App.Path

Comme ca plus de prob :
Call Shell("NotePad.exe """ & strAppPath & nomFichier
& """", vbNormalFocus)
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Pascal B. wrote:


"LE TROLL" a mal écrit:


x = Shell("NotePad.exe " & App.Path & nomFichier, 1)



Attention:
Cala peut ne pas fonctionner; surtout si il y a des
espaces dans les
chemins (Path) qui pouraient être interprétés comme
séparateurs.
Il vaut mieux entourer chaque paramètre par des
guillemets (code
ASCII 34):

Shell "NotePad.exe" & Chr(34) & App.Path & nomFichier
& Chr(34)

Cordialement,

Pascal B.















Avatar
ng
> fonction "ShellExecute" qui est bcp plus complète que "Shell".


ShellExecute() n'est pas plus complète, elle sert à autre chose, notamment
reconnaitre les protocoles mailto:, http... mais aussi les associations
générales des extentions (en passant seulement le chemin d'un doc en
paramètre).

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Eric wrote:
Euh nan je t'en veux pas lol.
Par contre je ne vois pas pourquoi je ne devrais pas mentionner la
fonction "ShellExecute" qui est bcp plus complète que "Shell".

LE TROLL wrote:
Salut chef :o)
Tu ne reprends que mes réponses, dis donc, tu m'en veux?
Eh, le patron il a dit Shell, alors on répond sur Shell,
pas être plus royaliste que le roi :o)
-------

"Eric" a écrit dans le message de
news:

Euh... et si vous utilisiez la fonction ShellExecute de
l'API, vous croyez pas que vous vous prendriez moins la
tête? :)

Private Declare Function ShellExecute Lib "shell32.dll"
Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal
lpOperation As String, ByVal lpFile As String, ByVal
lpParameters As String, ByVal lpDirectory As String, ByVal
nShowCmd As Long) As Long

Const SW_SHOWNORMAL = 1

Private Sub Form_Load()
ShellExecute Me.hwnd, "open", App.Path & nomFichier,
vbNullString, "C:", SW_SHOWNORMAL
End Sub



LE TROLL wrote:

He, il demande si on peut mettre une variable, c'est sans
doute pas NotePade, c'était juste pour l'exemple...
--------

"ng" a écrit dans le message de news:
%


Salut,



Shell "NotePad.exe" & Chr(34) & App.Path & nomFichier &
Chr(34)



Plus clair et plus rapide, il suffit de doubler les
guillemets :

De plus tu as oublié un espace entre notepad.exe et
l'argument :

Call Shell("NotePad.exe """ & App.Path & nomFichier &
"""", vbNormalFocus)

Et tjrs pareil : attention à App.Path qui ne renvoie pas
tjrs un à la fin !!!

Je conseil de déclarer une variable string strAppPath
publique et de l'initialiser comme suit :

If Right$(App.Path, 1) <> "" Then strAppPath = App.Path
& "" Else strAppPath = App.Path

Comme ca plus de prob :
Call Shell("NotePad.exe """ & strAppPath & nomFichier &
"""", vbNormalFocus)
--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Pascal B. wrote:


"LE TROLL" a mal écrit:


x = Shell("NotePad.exe " & App.Path & nomFichier, 1)



Attention:
Cala peut ne pas fonctionner; surtout si il y a des
espaces dans les
chemins (Path) qui pouraient être interprétés comme
séparateurs.
Il vaut mieux entourer chaque paramètre par des
guillemets (code
ASCII 34):

Shell "NotePad.exe" & Chr(34) & App.Path & nomFichier &
Chr(34)

Cordialement,

Pascal B.












1 2