Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: ELVJop en 18 Abril 2012, 15:06 pm



Título: Problema no se esperaba XXX en este momento [Batch]
Publicado por: ELVJop en 18 Abril 2012, 15:06 pm
resulta ser que haciendo un codigo que seria:
Código:
del /f /q
borrando esas caches que ya hos comente en otro post. bueno la question es que hago esto:
Código:
del /f /q XXXXXXXX >nul
Hasta aqui todo bien pero quiero hacer un contador del porcentaje. 10 - 20 -30...
seria algo asi:
Código:
cls
echo |-         | 10%
echo.
echo Eliminando archivos temporales.
Al ejecutarlo se me cierra la ventana pero antes de cerrar hay algo escrito asi que lo abro y con Impr pant y lo pego en el paint para ver que hay escrito. Y dice algo tipo: no se esperaba echo en este momento. ¿? Lo peor es que si lo quito al final termna asi:
Código:
cls
echo                                 operacion terminada correctamente
echo.
pause
goto :xxxxx
Y termina perfecto osea que no se donde esta el problema.s

PD: Otra cosa no sabra alguien el comando para mostrar el espacio libre? Recuerdo que por un tutorial de XXxxXxxx (hos dare una pista empieza por T y termina por !) Salia ese comando pero no encuentro el post


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: Eleкtro en 18 Abril 2012, 15:45 pm
echo |-         | 10%

Te doy una pista de porque no funciona :P
Cita de: Batch
Set /?

Operadores:
   
    ()                  - agrupar
    ! ~ -               - operadores unarios
    * / %              - operadores aritméticos
    + -                 - operadores aritméticos
    << >>               - desplazamiento lógico
    &                   - bit a bit y

    ^    - bit a bit exclusivo o
    |      - bit a bit
    = *= /= %= += -=   - asignación
    &= ^= |= <<= >>=
    ,                   - separador de expresión



no sabra alguien el comando para mostrar el espacio libre?

Puedes hacerlo con wmic, o un for con el comando DIR.
Código
  1. wmic logicaldisk where "DeviceID='C:'" get FreeSpace

PD: El total es en Bytes de cualquier manera en Batch.

Saludos


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: ELVJop en 18 Abril 2012, 15:52 pm
hay  :-X Se me olvido la regla!!!!
para lo segundo: se puede meter en una variable?
Y para la capacidad total?
(Lo de la variable lo digo porque no me siver tenerlo en bytes si lo pudiera poner en una variable lo podira sumar y restar con Set /a ) Una preguntita aparte: estreso con tantas preguntas? es que googleando nunca lo encuentro.


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: Eleкtro en 18 Abril 2012, 16:26 pm
Y para la capacidad total?
Código:
wmic logicaldisk where "DeviceID='C:'" get size

PD:
Mira los datos q puedes obtener para evitar preguntas acerca de lo mismo xD:
Código:
wmic logicaldisk where "DeviceID='C:'" get /format:list



no me siver tenerlo en bytes si lo pudiera poner en una variable lo podira sumar y restar con Set /a
1º - Puedes hacer un FOR para obtener y setear la 3ª linea del output del wmic (los bytes).
2º - No puedes hacer la conversión de bytes a mb/gb/tb en Batch, No soporta esa profundidad de bits en la operación. Esto es Batch!
Alternativas: Puedes usar PSinfo o un programita más sencillo que hice para convertir bytes a mb/gb/tb/pb
[Batch] [Ruby] Ctool (Convertidor de unidades Bytes, KB, MB, GB, TB y PB) (http://foro.elhacker.net/scripting/batch_ruby_ctool_convertidor_de_unidades_bytes_kb_mb_gb_tb_y_pb-t358002.0.html)



Una preguntita aparte: estreso con tantas preguntas? es que googleando nunca lo encuentro.
No te preocupes, Si fuesen dudas dificiles (Y muchas cada dia) si q me darías trabajo xD


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: ELVJop en 18 Abril 2012, 16:54 pm
Lo seinto no se usar el comando for. ademas lo poco que se usarlo es para repetir barias veces una operacion.
EL link del programa esta roto.


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: Eleкtro en 18 Abril 2012, 17:00 pm
EL link del programa esta roto.

Resubido: http://www.4shared.com/file/mjPOirX9/CTool.html


PD: Usa el buscador del foro.
http://ss64.com/nt/for_f.html
ahi tienes algunos ejemplos de FOR /F


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: ELVJop en 18 Abril 2012, 17:55 pm
lo siento pero nunca lo entiendo. Exactamente cuales son sus funciones?


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: Eleкtro en 18 Abril 2012, 23:02 pm
Exactamente cuales son sus funciones?

El CTool, o el FOR?

El ctool lo puedes usar para enviarle un parámetro al programa (el parámetro sería los bytes) y recibir el resultado en gb, para poder setearlo.

Y el for sirve para hacer cosas como esta:

Código
  1. @Echo OFF
  2. For /F %%? in ('wmic logicaldisk where "DeviceID='C:'" get size ^| Findstr "[0-9]"') Do (Set "Size_Bytes=%%?")
  3. For /F "Tokens=2 delims==" %%? in ('ctool %Size_Bytes% bytes gb') Do (Set "Size_GB=%%?")
  4. Echo Bytes: %Size_Bytes%
  5. Echo GB   :%Size_GB%

output:
Citar
Bytes: 500106752000
GB   : 465.76 GB


Otro ejemplo más automatizado:

Código
  1. @Echo OFF
  2.  
  3. For /F "tokens=1,* delims= " %%X  in ('wmic logicaldisk get Caption^,size ^| Find ":"') Do (
  4. For /F "Tokens=2 delims==" %%Z in ('ctool %%Y bytes gb') Do (
  5. Echo Disco: %%X
  6. Echo Bytes: %%Y
  7. Echo GB   :%%Z
  8. )
  9. )


output:
Citar
Disco: C:
Bytes: 500106752000
GB   : 465.76 GB

Disco: F:
Bytes: 2000396742656
GB   : 1863.01 GB


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: ELVJop en 19 Abril 2012, 21:13 pm
no hombre el for xD


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: ELVJop en 23 Abril 2012, 15:04 pm
Perdon por el doble post pero prefiero hacer 2 post que abrir un hilo nuevo. Aparte de que tengo examenes por eso no pude meterme estos dias. Estaba aprendiendo el comando FOR que tiene infinidad de funciones y logre usarlo para sacar partes de texto y porlas en otro sitio. ¿El problema? No se como aplicarlo ni con variables ni con ese comado. ¿ME ayudas? Porque si le mando a For por ejemplo la palabra 9 y despues poner Do echo %%i --- Espacio libre. ME saltan no se esperaba windir C: y cosas raras.


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: Eleкtro en 23 Abril 2012, 20:42 pm
Cuando Batch dice "No se esperaba...tal" Es por un error de sintaxis de escritura.

Si quieres ayuda postea tu intento de FOR y te lo corrijo para que veas en que fallas...

Saludos


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: ELVJop en 23 Abril 2012, 20:50 pm
No estoi en el ordenador en el que se efectuo tal error pero juraria que es asi:
Código:
FOR /F "tokens=7* delims= " %%i IN ("wmic logicaldisk where "DeviceID='C:'" get FreeSpace") DO echo %%i de Espacio libre
Como veras no se puede entender nada de lo que he echo lo que yo hago estaria bien  si fuera sobre texto plano. Pero con un comando no tengo ni idea.

PD: Al leer el codigo no te estreses. El comando for se me da fatal y aparte lo estoi intentando entender googleando y sobre todo de esta guia : http://foro.elhacker.net/scripting/programacion_batch_avanzada_nuevo-t132924.0.html


Título: Re: Problema no se esperaba XXX en este momento [Batch]
Publicado por: Eleкtro en 23 Abril 2012, 22:31 pm
No estoi en el ordenador en el que se efectuo tal error pero juraria que es asi:
Código:
FOR /F "tokens=7* delims= " %%i IN ("wmic logicaldisk where "DeviceID='C:'" get FreeSpace") DO echo %%i de Espacio libre

Antes de nada quiero decir que para mostrar esa info no necesitas un FOR:
Código
  1. Echo: Espacio libre: & wmic logicaldisk where "DeviceID='C:'" get FreeSpace | FINDSTR "[0-9]"

Y has elejido un muy mal ejemplo para practicar con el FOR, El wmic a veces resulta dificil de mostrar ya que está en caracteres unicode, Y casi siempre es necesario elegir el formato de listado adecuado que te ayude más a filtrar la info que deseas mostrar (El listado por defecto deja las lineas llenas de de espacios al final de cada linea...), y/o filtrarlo usando find o findstr...

Deberías practicar el FOR /F con comandos fáciles y a la vez muy útiles como DIR, TYPE, etc...

1º - Estás habilitando la expansión sin motivo.

2º - ¿Porque usas 7 tokens? En el output del del comando que dijiste de wmic solo hay 1 palabra...

3º - Estás usando comillas dobles y debes usar comillas simples ' ' a menos que uses "USEBACKQ"

4º - Hay que filtrar el output del wmic un poco...

Código
  1. FOR /F "Tokens=2 delims=," %%X IN ('wmic LogicalDisk Where "DeviceID='C:'" Get Name^,FreeSpace /Format:csv ^| FINDSTR [0-9]') DO (Echo %%X De espacio libre.)

Salu2