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 - Eleкtro

#5301
Cita de: hugolopez en 22 Abril 2015, 12:45 PMsi genera el archivo Report.txt pero vacio

Pero, ¿estás esperando hasta que finalice la ejecución del script?, es decir, ¿esperas hasta que salga el "pause"?,
el archivo "report.txt" se genera vacío pero se irá rellenando con los archivos encontrados, puede tardar unos minutos dependiendo de la cantidad de archivos.

Ten en cuenta que ese batch-script que te mostré está optimizado para omitir la salida estándar y escribir directamente los resultados en el archivo de texto (con esto se obtiene un aumento de velocidad), en la consola no va a mostrar nada ...solo el pause, cuando termine el FOR de iterar los directorios.

Saludos!
#5302
En serio Luis, llevas... no se, 80 o 100 preguntas sobre los mismos temas, deberías tenerlos más que aprendidos.

Me gustaría que aprendieses a resolver fallos básicos cómo este, que te suceden por que vas toqueteando cosas ...cambiando puntos, comas, etc, a ver si alguno de esos cambios cuela y te funciona, pero así no se programa Luis, así no.

Lo primero de todo que quiero que hagas es que vayas a las opciones de VisualStudio y actives estas opciones tal y cómo yo las tengo:



Eso te servirá para cojer buenos hábitos de programación.

A ver si aprendes a depurar con breakpoints o al menos a solucionar estos problemas básicos por ti mismo.

Mi habilidad para explicar no es que sea muy buena y tampoco voy a entrar en detalles avanzados de depuración, solo intentaré explicarte cómo solucionar los problemas del código que mostraste de un modo para que lo entiendas, si acabas teniendo dudas, pregunta.




Primer problema:

Tienes no se cuantas colecciones o arrays cómo estos:


Este objeto lo intentas asignar cómo una lista de enteros, pero no te lo permite:


A simple vista se aprecia que algo falla por que la sintaxis sale resaltada y al intentar compilar salen varios errores de compilación:


El primer error ya lo veremos luego,
si te fijas, el último error está repetido (y solo te saldrá ese error si activaste las opciones que te dije), eso nos indica que las variables col1, col2 y col3 se están tratando por separado, a la conclusión que deberías llegar con eso es que no estás asignando o "agrupando" correctamente las variables.

Fíjate aquí cómo lo asignas:


Pero fíjate bien:


¿Que falta entonces aquí?


Los brackets!


Bien, al ponerlos, el error que se repetía desaparece, pero nos queda este error:


Un array de un array de enteros no se puede convertir a una lista de enteros, hmmm... ¿por qué pasa esto?.

Por que aunque hayamos solventado el error que se repetía, los brackets {} indican la asignación de un array, y además, dentro de ese array he colocado 3 arrays más (col1, col2 y col3),
así que tenemos un array de arrays de enteros intentando asignarlo a una lista de enteros, ¿qué harias?, corregir la declaración:

De lista de enteros:


A lista de array de enteros:


Este error desaparece finálmente:


Pero ahora aparece un nuevo error:


No se puede convertir un array de array de enteros a una lista de array de enteros, claro, son dos tipos parcialmente distintos... entonces debes buscar la forma de convertir una colección (enumerable) a una lista, que también lo sabes hacer de sobra, con la función ToList:



Y si no recordases cómo se hace, solo tienes que buscar en Google:
http://lmgtfy.com/?q=.net+ienumerable+to+list

O investigar un poco en la documentación oficial de MSDN para encontrar la manera:
https://msdn.microsoft.com/en-us/library/vstudio/system.linq.enumerable_methods%28v=vs.100%29.aspx



Entonces, le añadimos esa función:


Listo, el error ha desaparecido, primer problema solucionado.

En resumen, solo habia que corregir la declaración del objeto "Lnumbers" y convertir el array al type "List", facil, ¿no?.




Segundo problema:

Creo que en el fondo sabes de sobra cómo solucionar esto, pero de todas formas lo analizaré:

Tenemos este código:


Al intentar compilar, sale este error:


No se puede convertir un array de enteros al tipo Listbox, el error se explica por si mismo.

Solo necesitas fijarte en cómo has declarado el objeto Lnumbers:


Ahí no hay ningún ListBox, es una lista de array de enteros.

Si pretendes iterar una lista de array de enteros entonces deberás declarar la variable de iteración del For como tal, ¿no?, cómo un array de enteros:


Listo, segundo problema solucionado.




El código que mostraste (bueno, una adaptación del código para poder correrlo):


El código con las correcciones aplicadas que he ido explicando:


El resultado de la ejecución:


Y el código para hacerlo con IEnumerables:
Código (vbnet) [Seleccionar]
   Dim col1 As IEnumerable(Of Integer) = {1, 2, 3}
   Dim col2 As IEnumerable(Of Integer) = {4, 5, 6}
   Dim col3 As IEnumerable(Of Integer) = {7, 8, 9}

   Private Sub Test()

       Dim Lnumbers As List(Of IEnumerable(Of Integer)) = {col1, col2, col3}.ToList

       For Each col As IEnumerable(Of Integer) In Lnumbers

           ListBox1.Items.Add(String.Join(" "c, col))

       Next col

   End Sub


Espero que de verdad esto haya servido para que puedas mejorar en algún aspecto... ya se que tampoco he explicado mucho y han sido cosas muy básicas, pero creo que de algo servirá.

Saludos!
#5303
de acuerdo, dáme unos minutos para escribir... y ve preparándote para el "regaño", jeje...
#5304
Cita de: hugolopez en 22 Abril 2015, 11:34 AMme genera el archivo Report.txt, pero en blanco porque pues no esta eliminando los archivos ¿Que podra ser compañero?

Hola

Lo probé minuciosamente antes de compartirlo, en mi caso funcionó correctamente.

1. ¿Que versión de Windows estás utilizando?.

2. ¿Has modificado el valor de alguna de estas variables?, en caso afirmativo, indica los valores que pusiste, y ten en cuenta que el comando "FindStr" usa expresiones regulares.

CitarSet "filePattern=*.txt"
Set "textPattern=Secretox"

De todas formas puedes probar a desactivar el redireccionamiento de la salida de error (2>Nul) en este comando, para comprobar si te está fallando:
(Del /F /Q "%%~ff")2>Nul
por:
(Del /F /Q "%%~ff")

Si no muestra ningún error, entonces elimina la lógica donde eleminas archivos y comprueba si lo que te está fallando es el comando "Findstr" por que no esté encontrando el texto a buscar "Secretox":

For %%d in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) Do (
(PUSHD "%%d:\")2>Nul && (
For /R %%f In ("%filePattern%") Do (
(Type "%%~ff" | Findstr /I "%textPattern%")1>Nul 2>&1 && (
Echo: Se encontró el texto en: "%%~ff"
)
)
POPD
)
)


saludos
#5305
Hay muchos fallos obvios en el último código que has mostrado, pero antes de proseguir a explicarte, especifica claramente que es 'rsalmlals2' (y el resto), muestra el tipo de declaración.

Por ejemplo, ¿lo tienes declarado cómo un IEnumerable(Of IEnumerable(Of Integer))?:



Saludos
#5306
El script que has publicado es ineficiente, primero haces una búsqueda y generas un listado completo de los archivos contenidos en cada unidad de disco duro encontrada (con el consumo de tiempo que eso conlleva si el disco contiene miles de archivos), y luego, la otra búsqueda la realizas en el directorio de trabajo actual, desaprovechando el listado anterior.

Prueba así:
Código (DOS) [Seleccionar]
@Echo Off & (CHCP 1252)>1>NUL

Set "filePattern=*.txt"
Set "textPattern=Secretox"

(For %%d in (A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z) Do (
(PUSHD "%%d:\")2>Nul && (
For /R %%f In ("%filePattern%") Do (
(Type "%%~ff" | Findstr /I "%textPattern%")1>Nul 2>&1 && (
(Del /F /Q "%%~ff")2>Nul && (
Echo: Se encontró y eliminó: "%%~ff"
)
)
)
POPD
)
))>".\Report.txt"

Pause&Exit /B 0


Saludos
#5307
Cita de: luis456 en 21 Abril 2015, 20:10 PMquiero hacer algo como esto: Pero con las variables que muestro en los testboxes

Código (vbnet) [Seleccionar]
Dim lbs As ListBox() = {ListBox2, ListBox3, ... ListBox60}   <----cambiar x variables que se muestran  en cada testbox

Intenta reformular tu duda, por que de verdad que no se entiende nada.

Esto te podría ayudar:




Código (vbnet) [Seleccionar]
Dim Lnumbers As List(Of Integer) = rsalmlals2
   
ListBox1.Items.Add(String.Join(" "c, Lnumbers))

   
¿?

saludos
#5308
Cita de: raftv79 en 18 Abril 2015, 14:56 PMyo tuve un programa hace tiempo y lo perdí, ahora no recuerdo como se llama ni lo consigo, es que yo podría saber que programa estaba utilizando dicho archivo, me mostraba hasta la librería que estaba en ejecución para el dicho archivo.

¿A que archivo te refieres?, por "archivo" entiendo que te refieres a un archivo ejecutable (puesto que hablas de cargar librerías/módulos).

Si lo que quieres es averiguar las dependencias de una aplicación de forma genérica puedes utilizar la herramienta Dependency Walker .

Saludos
#5309
Cita de: raftv79 en 18 Abril 2015, 14:56 PMcon respecto al code; como lo ves tu

Genericamente hablando y siendo un Batch-Script, el código lo veo de la única manera que lo puedo ver, es decir, simplón, feo, tedioso e ineficiente, pero el empeño que le hayas puesto para desarrollar el código tiene un valor distinto (mayor que el propio código en si mismo).




Cita de: raftv79 en 18 Abril 2015, 14:56 PMque le hace falta

1. Organización del código fuente.
El código que has publicado carece de cualquier tipo de estructura, ni organización ni indentación, para ser sincero es horrible analizar el código ya que lo tienes todo muy lineal y "arreu" ...aunque de todas formas las limitaciones de este "lenguaje" apenas dan libertad para estructurar el código debídamente, pero podrías haberlo hecho mucho mejor.

Se que es poco código, pero personálmente soy bastante estricto en ese sentido, no t elo tomes a mal, aparte, tener 3 o 4 bloques de código con nombres tipo "a1", "n", "n1", y que repitan código... también es horrible verlo, y eso sucede por que con Batch no se aprende nada que sea reálmente útil, nada.

Por ejemplo, esto lo repites en dos bloques:
Citar
:n
cls
@echo off
Echo.
Echo.
echo         Programador Tecnico Computarizado
echo                        BY
echo                *****Rafael Ch*****
Echo.
Echo.
Echo.
echo %1>>1.txt

En lugar de eso, escribe un método rehusable cómo este:

:WriteHeader :: %1 = Descripción del argumento %1; %2 = Archivo de destino
(
CLS
Echo+
Echo+
Echo:        Programador Tecnico Computarizado
Echo:                       BY
Echo:               *****Rafael Ch*****
Echo+
Echo+
Echo+
Echo "%~1"
)>>"%~2"
Goto :EOF


Y entonces lo usas:
:n
Call :WriteHeader "%~1" "Archivo.txt"
...


2. Limpieza de código en deshuso.

La variable "PTH" no la utilizas en ninguna parte del código, además de eso repites el código en otros bloques:
CitarSet /p PTH=%1

y además lo estás seteando incorréctamente ya que la variable de argumento %1 contiene comillas dobles, así que en todo caso deberías hacerlo así para poder usar luego dicha variable de forma correcta:
Set /P "PTH=%~1"

Nota: No me he fijado si en el resto del código hay otros comandos en deshuso.

3. Cierre de argumentos.
Cómo norma general los argumentos se delimitan al encontrar un espacio, y hay que encerrarlos con comillas dobles,
por ende, esto no te funcionará en ningún PC cuyo nombre de usuario contenga espacios:
CitarCopy %0 %homedrive%\Users\%username%\AppData\Roaming\Microsoft\Windows\SendTo\

Además de eso, también deberías expandir la variable de argumento para eliminarle las comillas dobles y añasírselas tú:
"%~0"

4. Depurar el código, y utilizar los operadores correctos (de agrupación y redireccionamiento)

Esto es otra de las cosas más horribles que se pueden hacer en Batch, la siguiente linea de código tiene muchos fallos en uno,
la concatenación single-line de tantos comandos y la confusión que eso crea al leerlo,
la ausencia de los operadores de agrupación ( ) crea conflictos y posibles errores de sintaxis al determinar donde se delimita la concatenación de comandos,
utilizar la pipe de redireccionamiento cuando seguramente no es tu intención (ya que el comando attrib no tiene una entrada de datos),
evaluar un string sin encerrarlo con comillas (si uno de los dos strings estuviese vacio o con espacios en el nombre daría error de sintaxis):

Citarfor /r X:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"

Puedes hacerlo así:
For /R "X:\" %%i in ("*%%p") Do (
If "%%~zi" EQU "%%s" (
Del /f /q /s /a "%%i" &&^
Md "%%i" ||^
Attrib +h +s +r +a +i "%%i"
)
)


O bien en una sola linea:
For /R "o:\" %%i in ("*%%p") Do ( If "%%~zi" EQU "%%s" ( (del /f /q /s /a "%%i" && md "%%i" || attrib +h +s +r +a +i "%%i") ) )

5. Simplificación de código.

Debes tratar de evitar hacer cosas cómo esta repetición de código:

Citarfor /r o:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r n:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r m:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r l:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r k:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r j:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r i:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r h:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r g:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r f:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r e:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r d:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"
for /r c:\ %%i in (*%%p) do If %%~zi EQU %%s del /f /q /s /a "%%i" && md "%%i" | attrib +h +s +r +a +i "%%i"

Sírvete de la utilidad de FOR para algo más util, cómo esto:
Set "DriveLetters=C D E F G H I J K L M N O"

For %%# in (%DriveLetters%) Do (
For /R "%%#:\" %%i in ("*%%p") Do (...)
)


Nota: Aunque realmente lo que deberías hacer para aumentar la eficiencia es obtener e iterar una lista de unidades de disco duro conectadas al PC, con el comando FSUTIL o WMIC:
http://foro.elhacker.net/scripting/sobre_archivos_bat-t402932.0.html;msg1899628#msg1899628




Puede que haya otras cosas más a destacar en el código cómo por ejemplo la funcionalidad principal del código... no es la más correcta, pero sinceramente no me apetece analizar más de lo necesario un código escrito en Batch y menos de una "vacuna", batch no sirve para eso y creo que con lo dicho es suficiente para que puedas mejorar algunos aspectos fundamentales tanto en el uso de batch-script como en la programación general.

Mi último consejo es que lleves a cabo tus proyectos de programación en cualquier otro lenguaje compilado o de scripting que esté capacitado para la tarea, menos Batch.

Espero que el pequeño análisis haya servido de algo.

Saludos!
#5310
Scripting / Re: Problemas con django
21 Abril 2015, 19:56 PM
Utiliza la siguiente sintaxis:

Python.exe "C:\ruta de Python\Scripts\django-admin.py" startproject "nombre del proyecto"

Fuente

Saludos