Autor
|
Tema: COMANDOS MULTIPLES - VB (Leído 8,590 veces)
|
rochro
Desconectado
Mensajes: 42
|
Hola a todos. Estoy intentando correr el cmd a través de un formulario pero no puedo realizar lo de comandos multiples. If My.Computer.FileSystem.FileExists(midirectorio & "\runpkr00.exe") Then Dim archivo = My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchAllSubDirectories, "*.t01") For Each file As String In archivo 'Dim archivo = My.Computer.FileSystem.GetFileInfo(File) Dim comando As String Dim cmdir As String cmdir = "cd " & midirectorio comando = "runpkr00.exe -d " & file & ".t01" Shell("cmd.exe /k" + cmdir + comando) next end if
como resultado me da: El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos. C:\Users\rchaconr\Documents\Visual Studio 2013\Projects\CONVERSOR DATOS GPS\CONV ERSOR DATOS GPS\bin\Debug> y lo que deseo es que se ejecute > cd midirectorio c:\midirectorio>runpkr00.exe -d archivo.t01 Espero que me puedan entender y tener un poco de su ayuda. Muchas gracias
|
|
|
En línea
|
|
|
|
El Benjo
|
Los nombres de los archivos que te devuelve las función que los lista te da la ruta completa del archivo, no solamente el nombre. Puede ser que tu error está ahí. Para resolverlo elimina el directorio raíz del nombre del archivo.
|
|
|
En línea
|
www.es.neftis-ai.comSí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
|
|
|
rochro
Desconectado
Mensajes: 42
|
Los nombres de los archivos que te devuelve las función que los lista te da la ruta completa del archivo, no solamente el nombre. Puede ser que tu error está ahí. Para resolverlo elimina el directorio raíz del nombre del archivo.
si coloco Shell("cmd.exe /k" & cmdir) ejecuta normal, pero hasta ahí noma. Lo que quiero es que además de ejecutar ese comando también se ejecute el otro en la misma consola.
|
|
|
En línea
|
|
|
|
El Benjo
|
Ah, ok, ya te entendí. Para eso debes poner: Shell("cmd.exe /k" + cmdir + " & " + comando)
El símbolo "&" hasta donde yo sé, se utiliza para separar comandos en la consola de windows. Dinos si te funciona.
|
|
|
En línea
|
www.es.neftis-ai.comSí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
|
|
|
rochro
Desconectado
Mensajes: 42
|
Ah, ok, ya te entendí. Para eso debes poner: Shell("cmd.exe /k" + cmdir + " & " + comando)
El símbolo "&" hasta donde yo sé, se utiliza para separar comandos en la consola de windows. Dinos si te funciona. Si me corre pero solo me ejecuta el comando "cmdir" mas no el de "comando". ¿Que puede estar mal? En si todo el codigo que tengo para el comand es: Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim midirectorio As String = TextBox1.Text If midirectorio = "" Then MessageBox.Show("Debe seleccionar la ruta donde se encuentra la data", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error) Else Try My.Computer.FileSystem.CopyFile( "C:\Program Files\convert data\runpkr00.exe", midirectorio & "\runpkr00.exe", Microsoft.VisualBasic.FileIO.UIOption.AllDialogs, Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing) Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Critical) End Try End If If My.Computer.FileSystem.FileExists(midirectorio & "\runpkr00.exe") Then For Each archivo In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchAllSubDirectories, "*.t01") Dim comando As String Dim cmdir As String Dim nombre As String nombre = My.Computer.FileSystem.GetName(archivo) cmdir = "cd " & midirectorio comando = "runpkr00.exe -d " & nombre & ".t01" Shell("cmd.exe /k" + cmdir + " & " + comando) Next End If End Sub
|
|
« Última modificación: 12 Junio 2014, 22:38 pm por rochro »
|
En línea
|
|
|
|
El Benjo
|
Mmmmmm, no sé en qué esté fallando, pero lo más seguro es que sea en la forma en que se construye la cadena.
Intenta poniendo un punto de interrupción y copia toda la cadena como debería salir al final. Luego escribe esa cadena en una consola de comandos y ve si también te da error. si es así entonces no es problema de programación sino de la construcción de la cadena.
|
|
|
En línea
|
www.es.neftis-ai.comSí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
|
|
|
engel lex
|
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
El Benjo
|
Lex, no conocía la existencia de los métodos para redirigir la salida y la entrada de las aplicaciones.
Rochro, el método que menciona Lex te permite enviar los comandos uno a uno sin necesidad de abrir múltiples ventanas. Esta sería una opción mejor.
|
|
|
En línea
|
www.es.neftis-ai.comSí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
|
|
|
rochro
Desconectado
Mensajes: 42
|
Lex, no conocía la existencia de los métodos para redirigir la salida y la entrada de las aplicaciones.
Rochro, el método que menciona Lex te permite enviar los comandos uno a uno sin necesidad de abrir múltiples ventanas. Esta sería una opción mejor.
Chicos! Muchas gracias, ya lo adapté pero hay algo que no me sale que es que si tengo en mi directorio mas de un archivo sólo lo aplica con uno y no con todos los que están en ese directorio. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim midirectorio As String = TextBox1.Text If midirectorio = "" Then MessageBox.Show("Debe seleccionar la ruta donde se encuentra la data", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error) Else Try My.Computer.FileSystem.CopyFile( "C:\Program Files\convert data\runpkr00.exe", midirectorio & "\runpkr00.exe", Microsoft.VisualBasic.FileIO.UIOption.AllDialogs, Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing) Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Critical) End Try End If If My.Computer.FileSystem.FileExists(midirectorio & "\runpkr00.exe") Then Dim CMDThread As New Threading.Thread(AddressOf CMDAutomate) CMDThread.Start() End If End Sub Private Sub CMDAutomate() Dim midirectorio As String = TextBox1.Text Dim myprocess As New Process Dim StartInfo As New System.Diagnostics.ProcessStartInfo StartInfo.FileName = "cmd" StartInfo.RedirectStandardInput = True StartInfo.RedirectStandardOutput = True StartInfo.UseShellExecute = False StartInfo.CreateNoWindow = True myprocess.StartInfo = StartInfo myprocess.Start() For Each archivo As String In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchAllSubDirectories, "*.t01") Dim SR As System.IO.StreamReader = myprocess.StandardOutput Dim SW As System.IO.StreamWriter = myprocess.StandardInput Dim comando As String Dim cmdir As String Dim nombre As String nombre = My.Computer.FileSystem.GetName(archivo) cmdir = "cd " & midirectorio comando = "runpkr00.exe -d " & nombre SW.WriteLine(cmdir) SW.WriteLine(comando) Results = SR.ReadToEnd SW.Close() SR.Close() Invoke(Finished) Next End Sub
|
|
« Última modificación: 17 Junio 2014, 22:03 pm por rochro »
|
En línea
|
|
|
|
El Benjo
|
No estoy seguro pero creo que tu problema puede estar en: Invoke(Finished)
Si lo que quieres es que el método se invoke con cada archivo entonces está bien. Pero si lo que quieres es que se invoque al final de todo el procedimiento entonces deberías ponerlo después del "next". Tampoco creo que haya necesidad de cerrar los streams en cada iteración por lo tanto también deberías provar dejando el código como sigue: Dim SR As System.IO.StreamReader = myprocess.StandardOutput Dim SW As System.IO.StreamWriter = myprocess.StandardInput Dim comando As String Dim cmdir As String Dim nombre As String For Each archivo As String In My.Computer.FileSystem.GetFiles(midirectorio, FileIO.SearchOption.SearchAllSubDirectories, "*.t01") nombre = My.Computer.FileSystem.GetName(archivo) cmdir = "cd " & midirectorio comando = "runpkr00.exe -d " & nombre SW.WriteLine(cmdir) SW.WriteLine(comando) Results = SR.ReadToEnd Invoke(Finished) Next SW.Close() SR.Close() End Sub
Para dejar más limpio el bucle.
|
|
|
En línea
|
www.es.neftis-ai.comSí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Conexiones multiples
Programación Visual Basic
|
demoniox12
|
5
|
2,624
|
7 Diciembre 2007, 15:06 pm
por demoniox12
|
|
|
multiples checkbox en php
PHP
|
pet_cx
|
3
|
40,845
|
29 Septiembre 2008, 04:45 am
por pet_cx
|
|
|
Multiples comandos simultaneos en mismo terminal.
Scripting
|
RocKHounD
|
0
|
6,091
|
12 Enero 2011, 18:26 pm
por RocKHounD
|
|
|
Multiples Bucles o Multiples Esperas
.NET (C#, VB.NET, ASP)
|
DarkMatrix
|
8
|
5,493
|
5 Septiembre 2011, 23:11 pm
por EddyW
|
|