elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Error raro con WMIC
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error raro con WMIC  (Leído 2,703 veces)
z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Error raro con WMIC
« en: 5 Febrero 2017, 17:14 pm »

Hola buenas,

pues veréis haciendo un script que lea las lineas de un txt y las interprete como rutas para luego obtener información como por ejemplo la fecha de creación, me he encontrado con un pequeño problema:

https://github.com/Ikillnukes/StarReset/blob/master/test.bat



Por lo visto, el for (si no mal lo estoy diciendo) envía tres (como minimo, si estamos leyendo una carpeta, mandará 2 + todos los archivos que posea) resultados del WMIC, uno es el del título del apartado que estamos pidiendo "CreationDate", los resultados en cuestión, y luego, un caracter en blanco que me está matando, no consigo quitarlo sin joder nada...

Cmoo véis ahí tengo una linea comentada, que comprueba si el carácter es blanco, no ejecutamos nada, mira lo que pasa:



He tenido que modificar el codigo del que hay ahora mismo, ya que descomentandoesas lineas el cmd se me peta...

Como veis estoy un tanto/bastante perdido, alguna ayudilla no estará mal recibida :silbar:

Un saludo.


« Última modificación: 20 Febrero 2017, 23:02 pm por Ikillnukes » En línea


Interesados hablad por Discord.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Error raro con WMIC
« Respuesta #1 en: 5 Febrero 2017, 19:02 pm »

La razón es muy simple, el proceso de WMIC escribe el output en Unicode y esto deja un caracter de retorno al final del output que recibe tu FOR (es decir, estás procesando más de una linea/valor en el FOR), simplemente es un problema de codificación, siempre se debe tener esto en cuenta al usar WMIC desde Batch por que es el "fallo" más común y que da mucho por culo.

Habia una forma muy elegante para que WMIC escribiese la salida en ANSI y poder parsearla perfectamente sin realizar apenas modificaciones, creo que había que especificar algún parámetro en el comando WMIC, pero no lo recuerdo y no lo encuentro por ningún lado, así que las otras opciones que te quedan son las siguientes:

1. Iniciar la CMD (y correr tu script) en modo Unicode.
Código:
CMD.exe /U

2. Especificar un formato de salida distinto de WMIC (por ejemplo el formato de salida CSV) y adaptar los delimitadores/tokens de tu FOR.
Código:
For /f "tokens=... delims=," In ('WMIC.exe ... /Format:CSV') Do (...)

3. Redireccionar la salida de WMIC al comando Find/FindSTR para evitar procesar las lineas en blanco.
Código
  1. for /f %%f in ('wmic Datafile where "name='%data_path%'" get CreationDate ^| FIND "."') do (
  2. if "%%f" NEQ "CreationDate" (
  3. echo %%f
  4. call :OUTPUT "%%f" "%target_dir%"
  5. )
  6. )

4. No usar WMIC al fin y al cabo, pues si el propósito es obtener la fecha de creación entonces puedes hacerlo con los modificadores de variable de FOR...
Código:
@Echo Off & SetLocal EnableDelayedExpansion

FOR /F "usebackq tokens=*" %%# in (
"folders.txt"
) Do (
Set "creationDate=%%~t#"
set "day=!creationDate:~0,2!"
set "month=!creationDate:~3,2!"
set "year=!creationDate:~6,4!"

    Echo Date: "!year!!month!!day!"
)

...Y por el amor de Dios, intenta seguir el ejemplo de sintaxis que he mostrado en el punto nº2, me refiero, usa los símbolos () para crear (abrir y cerrar) las correspondientes agrupaciones de comandos, sobre todo en búcles y condicionales ...o de lo contrario te auguro que en el futuro encontrarás errores de sintaxis que no sabrás de donde procederán.

EDITO: Ah, se me olvidaba comentarte...  
Aquí: if "%%f" NEQ "CreationDate" no estoy muy seguro de si lo has dejado así por algún motivo o no eres consciente de que "CreationDate" es un string, no una variable. Dicho de otra forma, siempre te va a dar positivo esa evaluación por qué estás comparando una fecha con el string "CreationDate"... quiero decir, la fecha siempre va a ser distinta: if "{formato_de_fecha_de_wmic}" no es igual a "CreationDate"

Saludos!


« Última modificación: 5 Febrero 2017, 19:35 pm por Eleкtro » En línea



z3nth10n


Desconectado Desconectado

Mensajes: 1.583


"Jack of all trades, master of none." - Zenthion


Ver Perfil WWW
Re: Error raro con WMIC
« Respuesta #2 en: 5 Febrero 2017, 19:31 pm »

Muchas gracias Elektro, yo aquí rompiéndome los cuernos para ahora saber que con un for loop se puede hacer ;D

No me quedaré quieto aún así, seguiré experimentando con el WMIC...



EDITO:

Por si alguno se ha quedado con las ganas de saber más:

https://technet.microsoft.com/en-us/library/bb490909.aspx



EDITO: Ah, se me olvidaba comentarte...  
Aquí: if "%%f" NEQ "CreationDate" no estoy muy seguro de si lo has dejado así por algún motivo o no eres consciente de que "CreationDate" es un string, no una variable. Dicho de otra forma, siempre te va a dar positivo esa evaluación por qué estás comparando una fecha con el string "CreationDate"... quiero decir, la fecha siempre va a ser distinta: if "{formato_de_fecha_de_wmic}" no es igual a "CreationDate"

Esto se que es una cadena de texto, ya te digo que por alguna razón el WMIC me la devolvía... :silbar:

El /format:VALUE está chido xd

Un saludo.
« Última modificación: 5 Febrero 2017, 19:49 pm por Ikillnukes » En línea


Interesados hablad por Discord.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error muy raro
PHP
naderST 7 12,835 Último mensaje 9 Julio 2009, 05:49 am
por naderST
wmic
Scripting
flony 5 3,701 Último mensaje 22 Marzo 2010, 17:14 pm
por FranciskoAsdf
ayuda error raro...
.NET (C#, VB.NET, ASP)
kakashi20 2 2,673 Último mensaje 15 Mayo 2010, 19:12 pm
por kakashi20
Error C++ Raro
Dudas Generales
Guillito 2 2,809 Último mensaje 30 Agosto 2021, 01:39 am
por Tachikomaia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines