[BATCH] Problema al setear variables en la consola de windows

Iniciado por SuperDraco, 18 Julio 2011, 05:31 AM

0 Miembros y 1 Visitante están viendo este tema.

SuperDraco

tengo un problema peculiar...

No quiero coger malos hábitos pero como se me da muy bien batch, pues quiero usar un código de BATCH en mi procedimiento, que me ahorrará varios días y montones de líneas más...

En fin, la línea es esta:

Shell "cmd start cmd /K set ruta=" & FName + "\" & archivo + "& echo %ruta%"

Como veis, uso cmd /K para que la ventana del cmd permanezca, seteo la variable ruta y luego hago un "echo" para mostrar como quedó la variable ruta... ... ...Pues el echo no funciona! en cambio si yo escribo manualmente echo %ruta% en esa misma ventana, si que aparece bien seteada.

No lo entiendo, he repasado y modificado 100 veces ese código, y creo que no le falta ni le sobra ningún caracter, la CMD debería mostrarme la variable.

No se si el problema es la manera de interactuar del VB con la consola de windows, o directamente el problema es de la cmd..no lo se.. ¿Alguna idea?
No he vuelto, solo estoy de paso.

$Edu$

No guarda la variable tienes razon, que raro.. yo primero pensaba que era porq no andaria el && pero si pones:

Shell "cmd /K ping -n 10 localhost&&echo listo"

Funciona, asique me interesa saber el porque no guarda la variable y solo al intentar otra vez seguido si, pero desde consola, porque desde vb6 ya abre otro nuevo y es lo mismo :S

WHK

#2
Shell "cmd start cmd /K set ruta=" & FName + "\" & archivo + "& echo %ruta%"

La sintáxis está mal... " & FName + " recuerda que en vb no puedes concatenar con +, debes usar & siempre, además el & final te lo tomará como parte de la variable i no le das un espacio en blanco para decirle a la consola que será una segunda instrucción, de todas formas te recomiendo usar && en ves de &

Shell "cmd start cmd /K set ruta=" & FName & "\" & archivo & " && echo %ruta%"

Prueba con %% en ves de % porque a veces da problemas solo, ya me ha pasado antes, te digo esto por experiencia.

Saludos.

Edito---------->
Código (vb) [Seleccionar]
Private Sub Command1_Click()
Dim FName As String, archivo As String
FName = "c:\"
archivo = "test\a b c\x.test"

Call Shell("cmd start cmd /K set ruta=" & FName & "\" & archivo & " | echo %ruta% && pause", vbNormalFocus)
End Sub

' set ruta=c:\test\a b c\x.test && echo %ruta% && pause


Lo probé y tampoco funciona, supongo de de una sola linea no se puede setear y lanzar el echo:

set ruta=c:\test\a b c\x.test && echo %ruta% && pause
set ruta=c:\test\a b c\x.test & echo %ruta% & pause
set ruta=c:\test\a b c\x.test | echo %ruta% & pause
set ruta=c:\test\a b c\x.test & echo %ruta% | pause

Desde la consola setean pero no imprimen inmediatamente la variable, hay que lanzar un segundo echo para eso.

Esto ya no es problema de visual basic sino de batch.

SuperDraco

#3
gracias por el tiempo que os habeis tomado, sobretodo whk y la cantidad de intentos...

Probé a concatenar con & y con +, probé usando dos %% en vez de una, probé lo mismo que tú, probé el comando "CMD" con distintos modificadores, probé usando setlocal de mil maneras expandiendo la variable, lo he probado todo...

Si alguien más quiere probar, aqui dejo el ejemplo (No funciona), solo hay que crear un nuevo proyecto en VB, pegar el código y ejecutarlo... y después de ejecutarlo, en la ventana del CMD escribir "Echo %ruta%" ... es increible.

Código (vb) [Seleccionar]
Option Explicit
Private Sub Form_Load()

Dim FNAME As String
Dim archivo As String
FNAME = "C:\users\administrador\desktop"
archivo = "1 2 3 4.msu"
Shell "cmd start cmd /K set ruta=" & FNAME & "\" & archivo & " && echo %ruta%"
End Sub



EDITO: otro ejemplo:

Shell "cmd start cmd /c set ruta=" & FNAME & "\" & archivo & " && if defined ruta PAUSE"

Con eso comprobamos que la variable se ha definido, y el cmd se pausa. funciona. Entonces el cmd si que reconoce que la variable se ha definido, pero echo no lo reconoce?  :-\





Analizando la situación, lanzo la pregunta para Leo o quien sepa la respuesta...

¿En un archivo .BAT, Como se puede setear una variable y poder usarla ¡solamente en una línea!?
No he vuelto, solo estoy de paso.

$Edu$

Espero la respuesta :)

pd: Pitoloko, usa solo Shell "cmd /k" en vez de Shell "cmd start cmd /k" que esta de mas, pero no cambia en nada sobre lo de setear la variable e imprimirla

FranciskoAsdf

Prueba colocando

Código (dos) [Seleccionar]

Shell "cmd start cmd /K set ruta=" & FNAME & "\" & archivo & " && echo "%ruta%""



A lo mejor te da problemas porque si la ruta tiene espacios, el cdm da error.

Saludos
Asdf debería ser algún tipo de función.

$Edu$

Yo ya probe de muchas formas asique no es eso, esperamos la respuesta de alguien que pruebe antes de comentar que es la idea