Autor
|
Tema: -> Programación BATCH Avanzada. (nuevo) (Leído 482,551 veces)
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
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: @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.
|
|
|
En línea
|
|
|
|
pablgonz
Desconectado
Mensajes: 4
|
Hola de nuevo, gracias por responder, lamentablemente no me funciono, va así 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 for /f "tokens=1,2,3 delims=-" %%a in (' dir /b *.ppm' ) do ( 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 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
|
|
|
En línea
|
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
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>
|
|
|
En línea
|
|
|
|
pablgonz
Desconectado
Mensajes: 4
|
Gracias por la respuesta, ahora funciona al 100%.
|
|
|
En línea
|
|
|
|
NekoOs
Desconectado
Mensajes: 18
|
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 ;)
|
|
|
En línea
|
|
|
|
NekoOs
Desconectado
Mensajes: 18
|
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
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 ;)
|
|
|
En línea
|
|
|
|
polmadur
Desconectado
Mensajes: 47
|
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
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
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. Find "PALABRA" "ARCHIVO.CSV" Findstr "PALABRA" "ARCHIVO.CSV"
Saludos!
|
|
|
En línea
|
|
|
|
Bulone
Desconectado
Mensajes: 16
Aquí dentro tengo paz pero hay fuera de dar guerra
|
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) 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.
|
|
« Última modificación: 11 Junio 2012, 01:11 am por EleKtro H@cker »
|
En línea
|
No existen los caminos equivocados puesto que en este viaje no puedes dejar de ir hacia donde vas
|
|
|
Aldorf
Desconectado
Mensajes: 4
|
Saludos a tod@s, antes que nada, muy bueno el tuto, muchas gracias por compartir. Ahora el mangazo: 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.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Programacion avanzada - Inline Asm/C (Muy bueno)
Programación Visual Basic
|
Tughack
|
4
|
3,025
|
8 Agosto 2007, 02:40 am
por Freeze.
|
|
|
[G] Libro Programacion Avanzada en Ensamblador!!!
ASM
|
-Gosw-
|
3
|
8,949
|
27 Mayo 2009, 10:40 am
por -Gosw-
|
|
|
algunas dudas en programacion BATCH(nuevo en esto de programacion)
Scripting
|
stock_C
|
8
|
9,428
|
19 Junio 2009, 18:08 pm
por frank30
|
|
|
[Taller] Programacion Avanzada en C/C++ (Linux)
Programación C/C++
|
[L]ord [R]NA
|
0
|
6,628
|
4 Octubre 2010, 04:53 am
por [L]ord [R]NA
|
|
|
Unix programacion avanzada
Unix/Unix-Like
|
sesiopower
|
1
|
8,112
|
1 Marzo 2014, 20:13 pm
por Joe Fraddy
|
|