Bat que no funciona al compilarlo

Iniciado por carlosguay, 28 Noviembre 2009, 11:13 AM

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

carlosguay

Hola de nuevo, otra preguntita.

Vereis hace unos dias me baje de aqui un codigo de una maquina de escribir, este.


@echo off
echo.
echo.
echo.
echo.
echo.
call:tpwrtr AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
call:sleep 2
echo.
echo.
call:tpwrtr BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
call:sleep 2
echo.
echo.
call:tpwrtr CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
call:sleep 2
echo.
echo.
call:tpwrtr DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
call:sleep 2
pause>nul
goto:eof
:tpwrtr
set palabra=%*
if not defined palabra (goto:eof)
set palabra=%palabra: =_%
call:length %palabra%
set /a contt=0
:loopt
call :tpwrtr1 %%palabra:~%contt%,1%%
set /a contt +=1
if %contt% leq %tam% (goto:loopt)
goto:eof
:tpwrtr1
set char=%1
if [%char%]==[_] (set char= )
<nul (set /p msg=%char%)
ping -n 1 127.0.0.0 -w 1>nul 2>&1
goto:eof
:length
set argl=%*
if not defined argl (goto :eof)
set wordl=%argl%
set /a contl=0
:loopl
if not defined wordl (goto endl)
set wordl=%wordl:~1%
set /a contl +=1
goto loopl
:endl
set tam=%contl%
goto :eof
:sleep
if "%1"=="" (goto :eof)
set /a limit=0
set /a limit=%1
if %limit% LEQ 0 (goto :eof)
set /a cont=0
:time
set mirror1=%time:~-4,1%
:increment
set mirror2=%time:~-4,1%
if not %mirror2%==%mirror1% (goto count)
goto increment
:count
set /a cont +=1
if "%cont%"=="%limit%" (goto :eof)
goto time
goto :eof


El autor me tiene que perdonar, pero no recuerdo su nombre.

Estoy haciendo un bat, que hace varias cosas y habia pensado que para ponerlo mas bonito y mas parecido a un programa, pues entre comando y comando ir poniendo comentarios de lo que estaba haciendo en cada momento.

El resultado es que funciona perfectamente, pero al compilarlo ya no funcina, ni el bat ni el codigo que os pongo mas arriba, osea realiza todo lo demas pero la parte de la escritura, no hace nada de nada.

En fin, pues esa era la pregunta, que si veis algo raro en el codigo o si saveis porque sucede eso, ya que me interesaria compilar mi bat y ponerlo lo mas bonito posible.

Gracias y un saludo

.;.

¿No entiendo lo de "realiza todo lo demás pero la parte de escritura no hace nada"?

¿Qué compilador usas?

carlosguay

Cita de: P4|3L0 en 28 Noviembre 2009, 11:40 AM
¿No entiendo lo de "realiza todo lo demás pero la parte de escritura no hace nada"?

¿Qué compilador usas?


A ver, si me explico mejor.
La maquina de escribir que pongo mas arriba, funciona perfectamente en un bat, pero al compilarla ya no funciona.
Com el bat que tengo, me pasa exactamente igual, osea todos los comandos que lleva el bat, los realiza perfectamente una ves compilado, menos la parte de la escritura.

Por ejemplo, empiezo poniendo la IP en manual, y a continuacion mando una linea de escritura, explicando lo que esta haciendo, pues la IP se cambia, pero la linea de la escritura no la realiza, hace como si la estuviera escribiendo pero no escribe nada y a continuacion sigue com el siguiente comando.

El compilador funciona perfectamente, pues he compilado muchos bat y no tengo problemas, es este.

CitarUntilled.bat-Quick Batch File Compiler

Espero haberme explicado mejor.

un saludo

Disembowelment

El problema esta en que el Quick Batch File Compiler reemplaza los %* por %cmdln% en el bat compilado, por eso no funciona correctamente el bat al compilarlo y ejecutarlo.

Una solución es así:

Código (dos) [Seleccionar]
@echo off
set asterisco=*
echo.
echo.
echo.
echo.
echo.
call:tpwrtr AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
call:sleep 2
echo.
echo.
call:tpwrtr BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
call:sleep 2
echo.
echo.
call:tpwrtr CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
call:sleep 2
echo.
echo.
call:tpwrtr DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
call:sleep 2
pause>nul
goto:eof
:tpwrtr
call set palabra=%%%asterisco%
if not defined palabra (goto:eof)
set palabra=%palabra: =_%
call:length %palabra%
set /a contt=0
:loopt
call :tpwrtr1 %%palabra:~%contt%,1%%
set /a contt +=1
if %contt% leq %tam% (goto:loopt)
goto:eof
:tpwrtr1
set char=%1
if [%char%]==[_] (set char= )
<nul (set /p msg=%char%)
ping -n 1 127.0.0.0 -w 1>nul 2>&1
goto:eof
:length
call set argl=%%%asterisco%
if not defined argl (goto :eof)
set wordl=%argl%
set /a contl=0
:loopl
if not defined wordl (goto endl)
set wordl=%wordl:~1%
set /a contl +=1
goto loopl
:endl
set tam=%contl%
goto :eof
:sleep
if "%1"=="" (goto :eof)
set /a limit=0
set /a limit=%1
if %limit% LEQ 0 (goto :eof)
set /a cont=0
:time
set mirror1=%time:~-4,1%
:increment
set mirror2=%time:~-4,1%
if not %mirror2%==%mirror1% (goto count)
goto increment
:count
set /a cont +=1
if "%cont%"=="%limit%" (goto :eof)
goto time
goto :eof

carlosguay

Gracias amigo, era ese el problema, me a funcinado perfecto.

Un saludo.