-> Programación BATCH Avanzada. (nuevo)

Iniciado por sirdarckcat, 24 Julio 2006, 10:01 AM

0 Miembros y 6 Visitantes están viendo este tema.

leogtz

Teniendo estos archivos:

C:\Users\leo\batch\temp>dir /b
a-tmp-000001.ppm
b-tmp-000009.ppm
c-tmp-000006.ppm
e-tmp-000010.ppm
final.cmd
h-tmp-000004.ppm
j-tmp-000003.ppm
n-tmp-000002.ppm
otro.cmd
u-tmp-000008.ppm
x-tmp-000005.ppm
y-tmp-000007.ppm
z-tmp-000011.ppm

C:\Users\leo\batch\temp>


Luego de correr el script:


C:\Users\leo\batch\temp>final.cmd

C:\Users\leo\batch\temp>

Me queda así finalmente:

C:\Users\leo\batch\temp>dir /b
a-tmp-1.ppm
b-tmp-9.ppm
c-tmp-6.ppm
e-tmp-10.ppm
final.cmd
h-tmp-4.ppm
j-tmp-3.ppm
n-tmp-2.ppm
otro.cmd
u-tmp-8.ppm
x-tmp-5.ppm
y-tmp-7.ppm
z-tmp-11.ppm

C:\Users\leo\batch\temp>

El script es este:

Código (bash) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,3 delims=-" %%a in ('dir /b *.ppm') do (
set "string=%%c"
set "string=!string:.ppm=!
for /f "tokens=* delims=0" %%A IN ("%string%") do set string=%%A
ren "%%a-%%b-%%c" "%%a-%%b-!string!.ppm"
)


Prueba si te funciona, saludos.
Código (perl) [Seleccionar]

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

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

pablgonz

Hola de nuevo, gracias por responder, lamentablemente no me funciono, va así
Código (dos) [Seleccionar]
C:\testv3\testv3\temp\dir /b
cambia.cmd
test-tmp-000001.ppm
test-tmp-000002.ppm
test-tmp-000003.ppm
test-tmp-000004.ppm
test-tmp-000005.ppm

luego de correr el script
Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,3 delims=-" %%a in ('dir /b *.ppm') do (
set "string=%%c"
set "string=!string:.ppm=!
for /f "tokens=* delims=0" %%A IN ("%string%") do set string=%%A
ren "%%a-%%b-%%c" "%%a-%%b-!string!.ppm"
)
resulta lo siguiente
Código (dos) [Seleccionar]
cambia.cmd
test-tmp-000001.ppm
test-tmp-000002.ppm
test-tmp-000003.ppm
test-tmp-000004.ppm
test-tmp-000005.ppm

Es decir, no efectúa el cambio indicado, quizás debí comentar que todos los ficheros tienen el mismo nombre, el cual deseo mantener, solo me interesa eliminar los ceros a la izquierda del contador, esperando su ayuda, se despide:
Pablo

leogtz

Perdón por la tardanza.

Creo que ya funciona, el error era que en el for interno, estaba utilizando los caracteres %% para interpolar la variable, y tenía que ser !!.

Mira:

C:\Users\leo\batch\temp>dir /b
final.cmd
name-tmp-0000001.ppm
name-tmp-00000010.ppm
name-tmp-00000011.ppm
name-tmp-0000002.ppm
name-tmp-0000003.ppm
name-tmp-0000004.ppm
name-tmp-0000005.ppm
name-tmp-0000006.ppm
name-tmp-0000007.ppm
name-tmp-0000008.ppm
name-tmp-0000009.ppm
otro.cmd

C:\Users\leo\batch\temp>type final.cmd
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2,3 delims=-" %%a in ('dir /b *.ppm') do (
        set "string=%%c"
        set "string=!string:.ppm=!
        for /f "tokens=* delims=0" %%A IN ("!string!") do set string=%%A
        ren "%%a-%%b-%%c" "%%a-%%b-!string!.ppm"
)
C:\Users\leo\batch\temp>final.cmd

C:\Users\leo\batch\temp>dir /b
final.cmd
name-tmp-1.ppm
name-tmp-10.ppm
name-tmp-11.ppm
name-tmp-2.ppm
name-tmp-3.ppm
name-tmp-4.ppm
name-tmp-5.ppm
name-tmp-6.ppm
name-tmp-7.ppm
name-tmp-8.ppm
name-tmp-9.ppm
otro.cmd

C:\Users\leo\batch\temp>
Código (perl) [Seleccionar]

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

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

pablgonz

Gracias por la respuesta, ahora funciona al 100%.

NekoOs

Cita de: TxShack en 11 Julio 2007, 15:11 PM
TxShack


bueno al parecer tienes unos pequeños errorcillos


  • falta un echo en la sexta linea
  • Debes agregar otro %% para que se imprima %clave%

@echo off
Rem yo lo probe en mi pc desde el escritorio eliminando esta linea
cd c:\
echo @echo off > pass.bat
echo :menu >> pass.bat
echo echo. >> pass.bat
echo echo INTRODUCIR CLAVE >> pass.bat
echo echo. >> pass.bat
echo set/p clave= >> pass.bat
echo if %%clave%%==fark (goto bien) else goto :menu >> pass.bat
echo :bien >> pass.bat
echo cls >> pass.bat
echo echo. >> pass.bat
echo echo ACCESO VALIDADO >> pass.bat
echo echo. >> pass.bat
echo pause >> pass.bat
echo exit >> pass.bat
Rem esta linea tampoco la use el objetibo de la prueba era que pass.bat se ejecutara y lo logro exitosamente
reg add hkey_local_machine\software\microsoft\windows\currentversion\run /v pass.bat /t reg_sz /d C:\ /f
Rem yo use la linea start %cd%\pass.bat por practicidad al momento de realizar pruebas
start c:\pass.bat
exit[/code
Espero te sea de utilidad  ;)

NekoOs

Cita de: TxShack en 11 Julio 2007, 15:11 PM
Bueno, queria saber si me podriais ayudar con este batch

Lo que quiero es que se añada al registro run pero no consigo hacerlo... algo debo de acer malalgo.. pero no se que... ace muchisimo que no uso los batch, porq se me daban bien.. pero se me an olvidado cosas poco a poco y aora no me sale esto

El codigo que qiero q salga es este:

Lo e estado intentando varias veces pero no lo consigo... e provado esto.. poro no funciona

Estare haciendo algo mal.. pero no se que... la cuestion es q no funciona..

Provadlo y vereis, y si me podeis ayudar os lo agradeceria ^^

bueno, y una ultima cosa... q tendria q añadirle para que quien lo ejecute no pueda dar a la X.. osea, q si intenta cerrar no pueda. Gracias

Un saludo

TxShack


Cita de: TxShack en 11 Julio 2007, 15:11 PM
TxShack


bueno al parecer tienes unos pequeños errorcillos


  • falta un echo en la sexta linea
  • Debes agregar otro %% para que se imprima %clave%

@echo off
Rem yo lo probe en mi pc desde el escritorio eliminando esta linea
cd c:\
echo @echo off > pass.bat
echo :menu >> pass.bat
echo echo. >> pass.bat
echo echo INTRODUCIR CLAVE >> pass.bat
echo echo. >> pass.bat
echo set/p clave= >> pass.bat
echo if %%clave%%==fark (goto bien) else goto :menu >> pass.bat
echo :bien >> pass.bat
echo cls >> pass.bat
echo echo. >> pass.bat
echo echo ACCESO VALIDADO >> pass.bat
echo echo. >> pass.bat
echo pause >> pass.bat
echo exit >> pass.bat
Rem esta linea tampoco la use el objetibo de la prueba era que pass.bat se ejecutara y lo logro exitosamente
reg add hkey_local_machine\software\microsoft\windows\currentversion\run /v pass.bat /t reg_sz /d C:\ /f
Rem yo use la linea start %cd%\pass.bat por practicidad al momento de realizar pruebas
start c:\pass.bat
exit[/code
Espero te sea de utilidad  ;)

polmadur

hola buenas, veréis, soy bastante novatillo en batch aunque tengo conocimientos aceptables en python así que domino la programación un poco(aunque mi estilo sea pésimo, lo reconozco).

Esta es mi duda, tengo un archivo en excel donde hay muchos nombres en diferentes páginas, cada página es un servicio de la asociación. La pregunta es si para recorrer ese archivo en busca de algún nombre en concreto se necesita algo especial, me refiero a como es un formato de texto diferente, CSV no lo se.

Si no hace falta nada especial ya me pongo yo a crear el script de busqueda.

gracias

Eleкtro

Cita de: polmadur en 25 Abril 2012, 12:20 PM
La pregunta es si para recorrer ese archivo en busca de algún nombre en concreto se necesita algo especial, me refiero a como es un formato de texto diferente, CSV no lo se.

Si no hace falta nada especial ya me pongo yo a crear el script de busqueda.

No es necesario nada especial, Puedes usar el comando "FIND" y "FINDSTR" con todo archivo que contenga texto.

Código (dos) [Seleccionar]

Find "PALABRA" "ARCHIVO.CSV"
Findstr "PALABRA" "ARCHIVO.CSV"


Saludos!








Bulone

#178
Hola, soy nuevo en este foro, quería saber si me podríais ayudar con el siguiente problema:

Estoy creando un programa en bat, el cual coge los valores de un .txt  y necesito entre otras cosas que me cambie los valores que contengan un "=" (sin comillas)  por el valor que queda detrás del caracter "="  (normalmente el caracter "=" no estará situado mas allá del 5 caracter)
(no se si me explico bien)

Ej:
set var1=987u=543  

(quiero que el resultado de var1 sea 543)


Ya he probado cosas del estilo:
set var2=%var1:==x%           (que me cambiase el igual por una x para trabajar mejor)

Código (dos) [Seleccionar]

if "%var:~1,1%"=="=" set var=%var:~2%
if "%var:~2,1%"=="=" set var=%var:~3%
if "%var:~3,1%"=="=" set var=%var:~4%
if "%var:~4,1%"=="=" set var=%var:~5%
if "%var:~5,1%"=="=" set var=%var:~6%
if "%var:~6,1%"=="=" set var=%var:~7%
if "%var:~7,1%"=="=" set var=%var:~8%
if "%var:~8,1%"=="=" set var=%var:~9%


(da error ya que reconoce el "=" como lectura del if)

(y otras tantas cosillas mas he probado también...) en definitiva si alguien me pudiese ayudar se lo agradecería, pues ya llevo varios días detrás de este problemilla. Si necesitais mas información sobre el problema, me decís.
Gracias de antemano.




NI caso al mensaje anterior, leyendo por ahí, encontré una solución al problema.
No existen los caminos equivocados puesto que en este viaje no puedes dejar de ir hacia donde vas

Aldorf

Saludos a tod@s,
antes que nada, muy bueno el tuto, muchas gracias por compartir.

Ahora el mangazo:  :silbar:
Tengo un problema al reemplazar parte del contenido de una variable, el problema surge por que lo que quiero poner contiene un "%".
Basicamente es reemplazar el "@" de un correo por un "%40".

Tengo esto:

set correo=yo@gmail.com
set correo=%correo:@=%40%


Por supuesto que esto no funciono, ya que al encontrar el "%" despues del "=" asume que termino el reemplazo y simplemente me elimina el "@" agregandole al final el "40"

Intente con:

set correo=yo@gmail.com
set correo=%correo:@=%40%
...
set correo=%correo:@=%%40%
...
set correo=%correo:@=%%%40%


Sin poder lograrlo, tambien intente usando una variable auxiliar con el valor "%40" pero siempre lo mismo.

La solucion que me queda me parece muy trucha, es ir preguntando caracter por caracter si es el "@" y una vez encontrado crear una nueva variable concatenando lo anterior al "@" con el "%40" y lo posterior al "@"...
Pero la verdad me parece una solucion muy trucha, por eso pregunto a quien sabe para aprender mas y hacer las cosas mejor.

Ya me parece mas que trucho lo que hice para a una variable asignarle el contenido de otra variable cuyo nombre era el contenido de otra variable... (parece un trabalenguas, verdad?).


@echo on & setlocal enableextensions disabledelayedexpansion
call:CargaVariables
cls
set Respuesta=
echo 0 - Salir
echo 1 - %Jugador1%
echo 2 - %Jugador2%
echo 3 - %Jugador3%
...
set /p Respuesta=Selieccione su opcion:
set JugadorElejido=set JugadorElejido^=%%Jugador%Respuesta%%%
%JugadorElejido%
call:ProcesoPrincipal %JugadorElejido%
if (%errorlevel%)==(1) goto:eof
%0
goto:eof


:CargaVariables
set Jugador1=Jose
set Jugador2=Miguel
set Jugador3=Marcela
...
goto:eof


:ProcesoPrincipal
if (%1)==() echo. & echo Saliendo... & echo. & pause & set errorlevel=1 & goto:eof
rem aca esta todo lo que hace en si el programa...
...
goto:eof


Desde ya, muchas gracias por la ayuda.