[Solucionado][BATCH]Problema con escritura en archivo.

Iniciado por FranciskoAsdf, 31 Marzo 2011, 17:53 PM

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

FranciskoAsdf

Hola, (de nuevo u.u), saludos.

Os vengo a molestar de nuevo porque ahora si que no sé que pasa o porque pasa lo que me pasa XDDDDD

Lo que pasa ( xDD ) es que tengo el siguiente trozo de script que por alguna razon no funciona como debería.

Código (CarroLleno.bat)
Código (dos) [Seleccionar]
:DIGITAR_PEDIDO
TITLE DIGITAR PEDIDO&CLS
ECHO.
SET "PRODUCTO_="
SET "CANTIDAD_P="
SET /P "PRODUCTO_=Producto: "
IF NOT DEFINED PRODUCTO_ (ECHO.&ECHO. Ingrese producto.-&ECHO.&PAUSE >NUL 2>&1&GOTO :DIGITAR_PEDIDO)
IF /I "%PRODUCTO_%"=="copiar" (
CLIP.exe < PEDIDO_DIGITADO_.txt
GOTO :INICIO
)
SET /P "CANTIDAD_P=Cantidad: "
IF NOT DEFINED CANTIDAD_P (ECHO.&ECHO. Ingrese Cantidad.-&ECHO.&PAUSE >NUL 2>&1&GOTO :DIGITAR_PEDIDO)
SET "ESPACIO_= "
ECHO %PRODUCTO_%%ESPACIO_%%CANTIDAD_P%>> PEDIDO_DIGITADO_.txt
GOTO :DIGITAR_PEDIDO


Entonces el problema es el siguiente;
Por ejemplo si digito lo siguiente:

Producto : 178282
Cantidad : 1


Escribe solo 178282.

Pero si escribo;

Producto : 178282
Cantidad : 10


Escribe los valores como corresponde (que es como yo quiero que quede en el .txt):

178282 10

En definitiva, solo "escribe" los valores de la variable si son mayores a 9.
Si pongo por ejemplo el codigo de escritura asi:

Código (dos) [Seleccionar]

ECHO %PRODUCTO_%>> PEDIDO_DIGITADO_.txt
ECHO %CANTIDAD_P%>> PEDIDO_DIGITADO_.txt


Ocurre exactamente lo mismo.

Estoy corriendo el script en Windows XP SP3 (por si es relevante :S)

PD: La variable %ESPACIO_% es necesaria, porque el contenido lo copio a SAP y SAP me pide ese espacio, si no, copia mal los datos.

Espero alguien me pueda ayudar, ya que no tengo idea porque pasa eso si no hago ninguna operación.

No llamo variables ni datos de otra parte del código.

Por favor, necesito saber como puedo solucionar esto o porque pasa por lo menos xDDD


Saludos y muchas gracias de ante mano :)
Asdf debería ser algún tipo de función.

leogtz

¿Y la etiqueta :INICIO?

¿porque no haces lo que te recomiendo?, porque el afán de poner varias sentencias en una sola línea?

Prueba esto a ver si funciona.


Código (dos) [Seleccionar]
setlocal enabledelayedexpansion
:PEDIDO
TITLE DIGITAR PEDIDO
CLS
ECHO.
SET /P "PRODUCTO=Producto: "
IF NOT DEFINED PRODUCTO (
GOTO:PEDIDO
)

IF /I "%PRODUCTO_%"=="copiar" (
CLIP.exe < PEDIDO_DIGITADO_.txt
GOTO:INICIO
)
:CANTIDAD
SET /P "CANTIDAD=Cantidad: "
IF NOT DEFINED CANTIDAD (
GOTO:CANTIDAD
)
ECHO !PRODUCTO!!ESPACIO_!!CANTIDAD!>> PEDIDO_DIGITADO_.txt
GOTO :PEDIDO
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

FranciskoAsdf

=O!, Funciona a la perfección, pero era solo por las sentencias en una sola linea? o igual influía lo de "setlocal enabledelayedexpansion"??.

Y la etiqueta :INICIO va al principio del script después de copiar :)

Aun así nunca había tenido problemas con escribir varias sentencias en una sola linea :S.

Muchas gracias Leo nuevamente por tu ayuda =)


Deberias (algun dia) explicar lo de setlocal enabledelayedexpansion xDDD, aun no entiendo  bien como funciona xDD


Pero bueno, muchas gracias de nuevo ^^
Asdf debería ser algún tipo de función.

SuperDraco

#3
creeme yo antes era como tu, ponía todas las sentencias en una linea...
Luego Leo me reectificó un code y desde entonces me di cuenta que era mucho mejor hacerlo así, a la hora de editar/buscar fallos en el script es MUCHISIMO más cómodo, y todo...no tiene comparación. Te recomiendo que a partir de ahora no sigas las malas costumbres.


Sobre el enabledelayedexpansion, para entenderlo mejor debes ponerlo en práctica, mirate estos ejemplos:
http://www.portalhacker.net/index.php/topic,81128.0.html
No he vuelto, solo estoy de paso.

FranciskoAsdf

Ok gracias pi
Cita de: pitoloko en  1 Abril 2011, 02:53 AM
creeme yo antes era como tu, ponía todas las sentencias en una linea...
Luego Leo me reectificó un code y desde entonces me di cuenta que era mucho mejor hacerlo así, a la hora de editar/buscar fallos en el script es MUCHISIMO más cómodo, y todo...no tiene comparación. Te recomiendo que a partir de ahora no sigas las malas costumbres.


Sobre el enabledelayedexpansion, para entenderlo mejor debes ponerlo en práctica, mirate estos ejemplos:
http://www.portalhacker.net/index.php/topic,81128.0.html

Gracias pitoloko por el dato, a ver si de una vez aprendo a usar el famoso comando xDD

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