Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - carlitos.dll

#191
Scripting / Re: Ayuda [BATCH]
29 Junio 2008, 12:04 PM

@echo off
for /f "tokens=* delims=$" %%t in (file.txt) do set s=%%t & call :metodo
pause
exit
:metodo
set text=perro
set replace=gato

::set s=%s:%text%=%replace%%
::aqui no logre colocar variables, esto no funciona.

echo %s%
::esto si funciona, aunque no es la idea.
set s=%s:perro=gato%
echo %s%


#192
1-lo de cols comentado es solo por gustos, perdona :D.

2-selecciono desde la letra indice 0 hasta n - 1, es decir al colocar (0,1) selecciono desde el indice 0 hasta el indice 1 - 1 es decir de 0 a 0, esto es la primera letra solamente. Entonces, si la variable comienza con 0, (para evitar que sea octal, vamos al comienzo (start)

3-Yo me equivoqué. si en el set /a asignas una letra queda en 0. Pero si ocurre un error, la asignación no ocurre, ahora si la variable existía queda como estaba.

4-si colocas  la ayuda de if (if/?) te dirá que: si los comandos de extensión están habilitados, if cambia así: (... GTR, LEQ) y con setlocal enableextensions habilitas esto.

Puedes leer el post de programación avanzada en batch, y te aseguro que todo te quedará más claro.

BONUS: te regalo un programa que te muestra los contenidos que van tomando las  variables en tiempo de ejecución de los bat, se llama PowerCmd.

http://wikisend.com/download/219636/PowerCmd.rar










#193
definitivamente es problema del compilador, lo probé con la versión que usaste y sucede lo que mencionas. Lo compilé con la versión 2.1.7 y ningún problema.

me tomé la libertad de modificar un poco tu código, para darte otra idea de cómo escribirlo, (como opinabas que daba muchas vueltas :D).


@echo off
rem Mode con Cols=54
:: rem y dos dos puntos es comentado

:start
cls
echo.
title Apagar el equipo - Temporizador
echo  ****************************************************
echo                  APAGAR EL SISTEMA
echo  ****************************************************
echo.
echo.

:ingreso
set priminutos=
set /p priminutos=" - Minutos: "
if "%priminutos%":=="" (goto start)
if %priminutos:~0,1%==0 (goto start)
:: si primera letra es 0 ir a start

set /a priminutos=%priminutos%
::si ocurrio un error queda en 0

setlocal enableextensions
:: comandos de extension habilitados, para el if.

if %priminutos% LEQ 0 (goto errora)
::si priminutos es menor o igual a 0 ir a errora

if %priminutos% GTR 1440 (goto errora)
::si priminutos es mayor a 1440 ir a errora

goto correcto

:errora
cls
::limpiamos rapidamente el error
echo.
echo.
echo  Hubo un error en la ejecucion del comando...
echo.
echo  Tal vez escribio un valor distinto a 1440 (24 horas)
pause>nul
exit

:correcto
set /a minutos=%priminutos%*60
echo.
set /p mensaje=" - Mensaje: "
set mensaje=%mensaje:"=%
::borramos las comillas de mensaje por si colocan encerrado entre comillas.
shutdown -s -t %minutos% -c "%mensaje%"
exit
#194
Ese error que mencionas sucede cuando con set /a asignas un valor que comienza con 0 (que indica que es octal) seguido de un número 8 o 9 (el sistema octal abarca los números de 0 a 7)

es decir si haces esto:

set /a numero=08
te arrojará ese error que mencionas.

por cierto interesante ese comando:
mode con
#195
Es un poco confuso, porque en el título dices "Ejecución de archivo exe con batch" y después dices, ejecutarlo con acceso directo.

Pero por fin te entendí.

Lo que necesitas es hacer es esto:

Crear un acceso directo con la siguiente ruta:

%COMSPEC% /c start %homedrive%\officexp-KB947866-FullFile-ESN.txt

o

%COMSPEC% /c start %systemroot%\officexp-KB947866-FullFile-ESN.txt


En dónde la carpeta de la ruta la específicas con variables, entra a cmd.exe y escribe set y verás las variables de carpetas.

Si el archivo está en Mis documentos pone por ejemplo:

%COMSPEC% /c start "%userprofile%\Documentos de %username%\officexp-KB947866-FullFile-ESN.txt"

Para retroceder un directorio colocas ..
Por ejemlo para ir a Document and settings:

%COMSPEC% /c start "%userprofile%\..\officexp-KB947866-FullFile-ESN.txt"

Por cierto debes cambiar officexp-KB947866-FullFile-ESN.txt por el archivo que tú deseas, en este caso lo hice con una actualización de office :D

#196
Scripting / BINARIO a BATCH
28 Junio 2008, 04:42 AM
Fanático de la portabilidad, y muy contento con el método de Shadow para convertir de binario a batch, me puse a buscar algún código que hicera lo mismo que el programa de Shadow, y descubrí uno hecho en pascal (nunca había leído pascal  :D), y lo compilé y no trabajaba bien, así es que lo arreglé con lo nada que sé de pascal, y mirando los resultados del programa de Shadow. El único problema que tiene es que con archivos grandes, no informa que son grandes, sino que se cae al ejecutarlo. Me comprometo a hacer lo mismo en C en un tiempo más.

Bueno, este es el código (modificado). Lo compilé con Free Pascal.

debugbat.pas
Código (pascal) [Seleccionar]


(*************************************************************************

             ===============================================
             Hex-encode binary files in debug-script batches
             ===============================================
                 Copyright (c) 1993,1994 by Jos, Campione
                   Ottawa-Orleans Personal Systems Group
                          Fidonet: 1:163/513.3

        This program reads a binary file and creates a hex-encoded
        text file. Will use debug.exe or debug.com to
        reconstruct the binary file.

**************************************************************************)
{$M 2048,0,0}
program debugbat;

uses crt,dos;

const
  maxsize = $FFFF;

type
  string2 = string[2];

var
  ifile : file of byte;
  ofile : text;
  n : word;
  s : word;
  b : byte;
  fsize : word;
  dir : dirstr;
  nam : namestr;
  ext : extstr;
  filename : string[48];
  i : integer;

function b2x(b: byte): string2;
const hexdigit: array[0..15] of char = '0123456789ABCDEF';
begin
  b2x:= hexdigit[b shr 4] + hexdigit[b and $0F];
end;

procedure myhalt(e: byte);
begin
  gotoxy(1,wherey);
  case e of
    0 : writeln('done.');
    1 : writeln('error in command line.');
    2 : writeln('file exceeds the 65K limit.');
    else begin
      e:= 255;
      writeln('Unknown error.');
    end;
  end;
  halt(e);
end;

begin
  writeln;
  writeln('DEBUGBAT v.1.0 Copyright (c) Feb/93 by J. Campione.');
  writeln('Modify by ...');
  write('Wait... ');
  n := 0;
  s := $00;
  {$I-}
  assign(ifile,paramstr(1));
  reset(ifile);
  {$I+}
  if (paramcount <> 1) or (ioresult <> 0) or (paramstr(1) = '') then myhalt(1);
  fsplit(paramstr(1),dir,nam,ext);
  for i:= 1 to length(ext) do ext[i]:= upcase(ext[i]);
  if ext = '.EXE' then filename:= nam + '.ext'
                  else filename:= nam + ext;
  fsize:= filesize(ifile);
  if fsize > maxsize then myhalt(2);
  assign(ofile, nam + '.src');
  rewrite(ofile);
  writeln(ofile,'N ',filename);
  while not eof(ifile) do begin
    n:= n + 1;
    read(ifile,b);
    if n mod 16 = 1 then begin
      writeln(ofile);
      write(ofile,'e ',b2x(hi(s)),b2x(lo(s)));
      s := s + 16;
    end;
    write(ofile,' ',b2x(b));
  end;
  writeln(ofile);
  writeln(ofile,'rcx');
  writeln(ofile,b2x(hi(n)),b2x(lo(n)));
  writeln(ofile,'w0');
  writeln(ofile,'q');
  close(ifile);
  close(ofile);
  myhalt(0);
end.




Se ejecuta así:

debugbat archivo

Luego, solo se toma el archivo resultante .src, y se hace en consola o desde un bat:

debug.exe < archivo.src

o

type archivo.src | debug.exe


Los archivos .exe se crearán como .ext (ya que sino debug arroja error)

Sugerencia obvia: Comprimir antes el ejecutable con upx. Revisar resultados, por ejemplo con fc.exe o comp.exe
#197
Scripting / Re: Cronometro en VBS :p
28 Junio 2008, 01:50 AM
Te felicito Novlucker, está muy bueno, lo que si, crítica constructiva, podría ejecutarse el txt en alguna carpeta temporal, porque en cuenta limitada, al no tener acceso a los directorios raíz, arroja error.

Por cierto, a mí no me sonó el beep, porque tengo la siguiente llave en el registro:

[HKEY_CURRENT_USER\Control Panel\Sound]
"Beep"="no"
"ExtendedSounds"="no"
#198
Lo que te entiendo es que quieres correr un ejecutable con otra extensión, con el comando start, no se que sucede con el comando start de mi pc, no me ejecuta aplicaciones que no sean .exe (debe ser por los parches). No entiendo que tiene que ver el acceso directo, porque puedes crear el bat o cmd, colocándo start y la ruta del archivo, en la que puedes utilizar %variables% como %tmp% %WinDir% %UserProfile% y después añades un acceso directo .pif



#199
Scripting / Re: Ejecutar Bat's Ocultos
27 Junio 2008, 06:17 AM
lo contrario de echo texto>NUL es echo texto>CON que es la salida por defecto (la pantalla).
#200
Scripting / Cómo mezclar BATCH + REG
27 Junio 2008, 04:00 AM
Cómo mezclar código REG y código batch: un archivo .reg (archivo de registro) es identificado por regedit.exe con una cabezera, que puede ser en windows 9x: REGEDIT4 o en Windows más actuales: Windows Registry Editor Version 5.00

Si utilizamos un archivo batch, y le ponemos como primera linea esta cabezera, y luego añadimos un @cls, para limpiar el error de "cómando no identificado", y luego añadimos más código batch, y al final añadimos código de registro, podemos llamar desde el mismo bat al mismo archivo, cómo si fuese un .reg

Ejemplo:
archivo.bat o archivo.cmd


REGEDIT4

@cls
::CarlitoS.dll
@echo off
echo Tenemos codigo batch y REG en este mismo archivo.
regedit /s "%~f0"
pause
exit

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"ClearRecentDocsOnExit"=dword:00000001