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 - leogtz

#441
Scripting / Re: BATCH encuentra el error
21 Julio 2011, 20:18 PM
Para la otra si no colocas el código con la etiqueta de código tu mensaje será eliminado sin advertencia.
#442
Scripting / Re: Script de busqueda en bash
21 Julio 2011, 08:43 AM
La sintaxis del comando es correcta, ¿por qué dices que no te funciona?
#443
Scripting / Re: [Bash] Problema con array
21 Julio 2011, 08:42 AM
Comparar nombres respecto a longitud o a lexicograficamente cuál es mayor?
#444
Jaja, perdón por el shit, siempre les pongo nombres malos a mis variables cuando programo rápido :s.

Y tranquilo, seguro que tu script también funciona.
#445
Bueno, a ver si he entendido, tu haces una consulta SQL la cual te devuelve los valores que comienzan con H y eso lo volcas a un archivo familia.txt...

Ahí hay que trabajar el archivo para que cada valor(ejemplo):

HEMILIO            
HRODRIGO
HCARMEN
HLORENA            

lo meta en una variable independiente, bueno, si he entendido bien, podríamos trabajar con un array:

@echo off
setlocal enabledelayedexpansion
set /a contador=0

rem "familia.txt" es el archivo conteniendo el resultado de la consulta:
rem szfamilyname
rem --------------------
rem HMAR
rem HTERESA
rem HLUZ

rem (3 rows affected)

for /f "tokens=*" %%_ in ('findstr /r ^H.*$ familia.txt') do (
set query[!contador!]=%%_
set /a contador+=1
)
echo No. de valores: !contador!

rem Los valores son guardados en el array "query".
rem Para mostrar los valores del array:
rem Primera posición:
echo !query[0]!
rem Segunda posición:
echo !query[1]!
rem Tercera posición:
echo !query[2]!
rem Y así consecutivamente...
rem Solo estoy mostrando hasta el 3, claro que puede haber muchos más.
pause


He comentado un poco el código para que lo entiendas mejor, sino cualquier duda la aclaramos.

Tomando el archivo familia.txt con:

C:\Users\leo>type familia.txt
szfamilyname
--------------------
HEMILIO
HRODRIGO
HCARMEN
HLORENA

(4 rows affected)
C:\Users\leo>


El código devuelve:

C:\Users\leo>code.cmd
No. de valores: 4
HEMILIO
HRODRIGO
HCARMEN

C:\Users\leo>

Lo cual es correcto.

Ahora, si quisieramos mostrar todos los valores:

@echo off
setlocal enabledelayedexpansion
set /a contador=0

for /f "tokens=*" %%_ in ('findstr /r ^H.*$ familia.txt') do (
set query[!contador!]=%%_
set /a contador+=1
)
echo No. de valores: !contador!

rem Los valores son guardados en el array "query".
rem Para mostrar los valores del array:
rem Primera posición:
echo !query[0]!
rem Segunda posición:
echo !query[1]!
rem Tercera posición:
echo !query[2]!
rem Y así consecutivamente...
echo.
echo Todos los valores son:
set /a contador-=1
for /l %%_ in (0,1,!contador!) do (
echo !query[%%_]!
)
pause


¿Me queda una duda, para qué utilizas Batch?, en el trabajo?, universidad?
#446
Aquí está mi solución, recién salida del horno, lo bonito del código es la función "dirname"
que obtiene el directorio en el cual se encuentra un archivo, la función utiliza recursividad y
expresión regular.

Miren:

CitarC:\Users\leo>dirname c:\Users\leo\HijackThis.exe
[leo\]

C:\Users\leo>dirname "c:\Users\leo\Configuración local"
[leo\]

C:\Users\leo>dirname "c:\Users\leo\Desktop\BeJeweled 2 .lnk"
[Desktop\]

Obtiene el directorio en el cuál está el archivo. Esta función fue necesaria para la comparación entre el nombre de archivo y el directorio en el cual se encuentra el archivo.

Con esto he probado el código:

CitarC:\Users\leo>cd test

C:\Users\leo\test>tree /f
Listado de rutas de carpetas para el volumen Descargas
El número de serie del volumen es 00000200 466D:2456
C:.
¦   lala.html
¦   log.txt
¦   test.cpp
¦   test.exe
¦   test1.txt
¦
+---algo
¦       .bash_history
¦       10-easy-vim.pdf.zip
¦
+---test1
   ¦   test1.txt
   ¦
   +---algo
           .bash_history
           10-easy-vim.pdf.zip
           algo.bash_history
           algo.zip


C:\Users\leo\test>
test.cpp y test.exe tienen 370 KB y están en el directorio test, por lo cual deben de eliminarse.
En el directorio test1, test1.txt debe ser eliminado porque tiene 6KB y se llama igual que su directorio.
En el directorio algo, algo.bash_history debe ser eliminado porque tiene 170KB y está en el directorio algo.

El script genera un log en el directorio test con la siguiente información:

CitarNo borrar ... lala.html, directorio : C:\Users\leo\test, size : 540KB
Borrar archivo ... test.cpp, directorio : C:\Users\leo\test, size : 370KB
Borrar archivo ... test.exe, directorio : C:\Users\leo\test, size : 370KB
No borrar ... test1.txt, directorio : C:\Users\leo\test, size : 1KB
No borrar ... .bash_history, directorio : C:\Users\leo\test\algo, size : 170KB
Borrar archivo ... test1.txt, directorio : C:\Users\leo\test\test1, size : 6KB
No borrar ... .bash_history, directorio : C:\Users\leo\test\test1\algo, size : 170KB
Borrar archivo ... algo.bash_history, directorio : C:\Users\leo\test\test1\algo, size : 170KB

@echo off
setlocal enabledelayedexpansion
cd ./test
set dir=%CD%
rem Analizar el directorio actual:
for /f "tokens=*" %%_ in ('dir /b /a-d *.exe') do (
set size=
call:size "%%_"
if !talla! lss 500 (
call:dirname %%~dp_
if "!shit!"=="%%~n_\" (
echo Borrar archivo ... %%_, directorio : !cd!, size : !talla!KB >> "%dir%\log.txt"
) else (
echo No borrar ... %%_, directorio : !cd!, size : !talla!KB >> "%dir%\log.txt"
)
) else (
echo No borrar ... %%_, directorio : !cd!, size : !talla!KB >> "%dir%\log.txt"
)
)
rem Analizar subdirectorios:
for /f "tokens=*" %%_ in ('dir /b /s /ad') do (
pushd "%%_"
for /f "tokens=*" %%f in ('dir /b /a-d *.exe') do (
set size=
call:size "%%f"
if !talla! lss 500 (
call:dirname %%~dpf
if "!shit!"=="%%~nf\" (
echo Borrar archivo ... %%f, directorio : %%_, size : !talla!KB >> "%dir%\log.txt"
) else (
echo No borrar ... %%f, directorio : %%_, size : !talla!KB >> "%dir%\log.txt"
)
)
)
popd
)

goto:eof
:size
set /a talla=%~z1 / 1024 + 1
goto:eof
:dirname
if "%~1"=="" goto:eof
for /f "tokens=1* delims=\" %%a in ("%~1") do (
set shit=%%b
echo %%b | findstr /R "\\.." > nul && call:dirname !shit!
)


Saludos.
#447
En un rato checo tu duda.
#448
brake causa la interrupción inmediata de un for, while, case, do-while, es decir, simplemente sales del ciclo.

continue se utiliza para pasar a la siguiente iteración del ciclo.

break - romper
continue - continuar...
#449
Cita de: Randomize en 20 Julio 2011, 06:21 AM
A tí si que te vamos a dar faltas hortográficas...

+=1
#450
Esto también debería funcionar:
Código (dos) [Seleccionar]
tasklist | find /i "gta_sa.exe" && (
taskkil -f -im explorer.exe
)

No lo he probado.