Tema destacado: ¡Aprende hacking con práctica! - arZone, el wargame de elhacker.net
Autor
|
Tema: -> Programación BATCH Avanzada. (nuevo) (Leído 187,261 veces)
|
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
 
Desconectado
Mensajes: 2.968
/^$/
|
Soy nuevo en el foro y me disculpan si violo alguna regla, pero la verdad necesito con urgencia que me ayuden con ese código; necesito borrar un archivo que contenga una cadena de texto específica; ejemplo, borrar archivos .ini que contengan la palabra "MusicAlbum" en todo el disco duro, muchas gracias por su ayuda.
¿El archivo dónde se encuentra? El usuario da el archivo a borrar o se tiene que buscar antes? Da más datos si quieres que se te ayude. ¿por qué la urgencia?
|
|
|
|
|
En línea
|
|
|
|
almacenero
Desconectado
Mensajes: 1
|
Muchísimas gracias sirdarckcat. Un tuto cojonudo.
|
|
|
|
|
En línea
|
|
|
|
pablgonz
Desconectado
Mensajes: 4
|
Hola a todos, soy nuevo en el foro (lo leía pero no estaba registrado) tengo una duda habitual en la red sobre FOR y rename, pero, esta es para una cadena de archivos especifica (la idea es hacerlo con la linea de comando y no con programas externos) va así, estoy dentros del directorio temp, y en el hay un sub directorio imágenes, en este directorio tengo una serie de archivos de las siguiente forma name-tmp-000001.ppm, name-tmp-000002.ppm, name-tmp-000003.ppm,... donde name puede ser cualquier carácter (alfanumérico,_,etc.) y -tmp- siempre esta presente, lo que deseo es re nombrarlos para que queden así: name-tmp-1.ppm, name-tmp-2.ppm, name-tmp-3.ppm,... usando FOR y rename, ¿es posible?, con una perl1linea se que puedo, pero, necesito saber como hacerlos (si es posible) desde la linea de comando, pera poder incluirlo dentro de un script. De Antemano muchas gracias Pablo
|
|
|
|
« Última modificación: 23 Noviembre 2011, 04:14 por pablgonz »
|
En línea
|
|
|
|
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
 
Desconectado
Mensajes: 2.968
/^$/
|
El orden importa?
Es decir,
name-tmp-000001.ppm, name-tmp-000002.ppm, name-tmp-000003.ppm,...
podría quedar:
name-tmp-3.ppm, name-tmp-5.ppm, name-tmp-1.ppm,... ?
No importa que el nombre (name), no coincida con el número?
|
|
|
|
|
En línea
|
|
|
|
pablgonz
Desconectado
Mensajes: 4
|
Hola, gracias por la pronta respuesta, la verdad es que el orden importa: name-tmp-000001.ppm, name-tmp-000002.ppm, name-tmp-000003.ppm,... debería quedar: name-tmp-1.ppm, name-tmp-2.ppm, name-tmp-3.ppm,... algo como «truncar los ceros» (si es que se le puede llamar asi), otro dato 000001.ppm es una cantidad fija de números, me explico, puedes ser eso o 000099.ppm o 000999.ppm, sucesivamente, es decir, es el contador del archivo pero completado con ceros hacia la izquierda. Gracias por la respuesta, a ver si me pueden ayudar con este problema.
|
|
|
|
|
En línea
|
|
|
|
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
 
Desconectado
Mensajes: 2.968
/^$/
|
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 @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 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
|
|
|
|
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
 
Desconectado
Mensajes: 2.968
/^$/
|
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
|
|
|
|
Nefkofan
Desconectado
Mensajes: 7
|
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
|
|
|
|
Nefkofan
Desconectado
Mensajes: 7
|
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 aciendo 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: 12
|
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
|
|
|
|
|
EleKtro H@cker
|
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
|
Siempre habrá alguien más ignorante que uno mismo, Como por ejemplo el nuevo presidente de la SGAE: "La banda ancha es totalmente innecesaria para navegar convencionalmente, Solo sirve para descargar megas y megas grandisimos, Y tal." PD: Volviendo a la era de los 56 k.
|
|
|
|
|