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

#1251
Scripting / Re: Error con batch
8 Febrero 2018, 21:41 PM
Cita de: Danydarko en  8 Febrero 2018, 20:25 PMPero al seleccionar el 2, me da el siguiente error:

No se esperaba & en este momento.

¿Que puede estar mal?

Bueno, el motivo de ese error de sintaxis es obvio:
Citarif %ver&==2 goto is

ahí cometiste un pequeño fallo al escribir el símbolo de la variable.




Por cierto, en esta parte del código:

Citar
Código (dos) [Seleccionar]
set /p ver= Elija una opcion
if %ver%==1 goto et
if %ver&==2 goto is

:et
...

...¿has pensado que ocurriría si el usuario escribe cualquier otra cosa que no sea "1" ni "2"?, tal y como tienes ahora mismo ese código, cualquier texto introducido que no sea "2", practicamente se evaluaría como si el usuario hubiese elegido la opción "1", puesto que la ejecución del código seguiría en la etiqueta :et

En lugar se usar Set /P, deberías usar el comando CHOICE para elaborar ese tipo de selección de opciones de forma estable y sofisticada.

Saludos
#1252
Cita de: Javidod en  7 Febrero 2018, 23:55 PMTambién está el problema de que alguno de ellos tiene dos puntos en su nombre por ejemplo: crysis.bin.gz, por lo que al separarlo por el punto no funciona demasiado bien.

Si estás partiendo el string usando como delimitador el caracter de punto, y tenga la cantidad de puntos que tenga el nombre, tan solo debes descartar el último elemento partido, y esa será siempre la extensión del archivo. Claro que primero debes comprobar que el nombre de archivo contenga al menos 1 punto, o dicho de otro modo: una extensión.

De todas formas, al parecer la solución más apropiada y eficiente es mucho más simple que andar partiendo strings, se conoce como 'Shell Parameter Expansion':

Documentación:

PD: no recuerdo nada sobre el uso de Bash, no te puedo ayudar en lo demás, pero es cuestión de que busques un poco en San Google, ya que son dudas/problemas muy básicos que ya todo el mundo habrá preguntado alguna vez en la World Wide Web...

Saludos
#1253
Cita de: Saito_25 en  7 Febrero 2018, 23:57 PMAclaro que la carpeta C no es el directorio principal C:, sino una carpeta normal, dentro de mi usuario, que nombré así porque la actividad lo pedía.

A ver si me podéis echar una manita, estoy amargado ya.

Pues... ya te expliqué como hacerlo:

Código (dos) [Seleccionar]
XCopy.exe /E "%USERPROFILE%\C\*" "%USERPROFILE%\Documents\"




Cita de: Saito_25 en  7 Febrero 2018, 23:53 PMSe lo pregunté... Y me dijo que lo investigaría, que no recordaba cómo se hacía XDDDDDDDDDDDD.

Pues vaya un profesor que pone ejercicios para realizar sobre un entorno que ni él mismo domina a nivel usuario, y encima exigiendo que se hagan de cierta manera...

...lamentablemente se que suele ser algo habitual que hayan profesores así, y mientras tanto, otras personas que serán más merecedoras de tener su puesto, estarán en paro.

Aquí te dejo algo de info (info general, e info enfocada a Batch), si la quieres:


saludos!
#1254
Cita de: Saito_25 en  7 Febrero 2018, 23:33 PM¿Alguien me puede ayudar?

Si el código real se parece al que has mostrado, entonces para solucionarlo simplemente debes encerrar entre comillas dobles los argumentos que tengan espacios en blanco. Toma el siguiente ejemplo de sintaxis como guía:
Código (dos) [Seleccionar]
XCopy.exe /E "C:\Users\mi usuario\C\*" "C:\Users\mi usuario\Documents\"
( conde 'C:\Users\mi usuario' lo podrías simplificar, reemplazándolo por la variable de entorno %USERPROFILE%. )

Esto que te he dicho de las comillas dobles es un conocimiento básico esencial, me refiero, es algo que se debe conocer sí o sí en la programación. Creo que deberías pedirle a tu profesor que te explique sobre el concepto de lo que es un argumento, como se delimitan, y las comillas dobles, para que se usan, como se usan, y cuando se usan.

Saludos!
#1255
Cita de: kaiserdj en  7 Febrero 2018, 22:22 PM
lo que quiero hacer es que en el form1 muestre un user control, y cuando le de a un boton dentro ese user control, haga .BringToFront(); de otro user control dentro del form1, no se si me entiendes.

1. ¿Qué has intentado hacer para solucionarlo?, muestra el código... en el foro no se pide ni se hacen tareas.

2. ¿Qué es exactamente en lo que tienes dificultades con ese problema?.

De todas formas te explico, basicamente lo único que tienes que hacer es controlar el evento Button.Click del botón hijo de tu user control, y ahí invocas un evento base, es decir, un evento existente en la clase de tu user control.

Por si no lo has entendido bien, lo explicaré de otra forma: en la clase de tu user control, lo primero de todo debes declarar y exponer un evento llamado 'Click' (o como lo quieras llamar, eso no importa), luego hace falta que añadas un método llamado 'OnClick' que servirá para invocar el evento 'Click'. Ya tienes creado el evento y el invocador del evento, bien, ahora, debes añadir otro método para controlar el evento 'Button.Click' del botón hijo, y en el bloque de código de ese controlador del evento 'Button.Click' debes invocar el evento 'Click' base, es decir, el evento que declaraste en tu user control, llamando al invocador del evento (el método 'OnClick').

Si estás heredando la clase UserControl o cualquier otra clase que herede de la clase Control (como sería lógico suponer que estás haciendo), entonces puedes saltarte unos cuantos pasos, puesto que dicha clase ya expone un evento llamado Click que lo heredas y del cual podemos servirnos de la siguiente manera:

Código (csharp) [Seleccionar]
[DefaultEvent("Click")]
public class MyUserControl : UserControl {

   protected Button ChildButton;

   public MyUserControl() {
       this.ChildButton = new Button();
        this.ChildButton.Click += this.ChildButton_Click;
       this.Controls.Add(this.ChildButton);
   }

   private void ChildButton_Click(object sender, EventArgs e) {
       base.OnClick(e);
   }

}


Te muestro la forma que expliqué de hacerlo al principio, es decir, creando un nuevo evento:

Código (csharp) [Seleccionar]
[DefaultEvent("ClickButton")]
public class MyUserControl : UserControl {

   protected Button ChildButton;
   public event EventHandler<EventArgs> ClickButton;

   public MyUserControl() {
       this.ChildButton = new Button();
        this.ChildButton.Click += this.ChildButton_Click;
       this.Controls.Add(this.ChildButton);
   }

   protected virtual void OnClickButton(EventArgs e) {
       if (this.ClickButton != null) {
           this.ClickButton(this, e);
       }
   }

   private void ChildButton_Click(object sender, EventArgs e) {
       this.OnClickButton(e);
   }

}


Ese último ejemplo serviría para diferenciar un tipo de click de otro, es decir, diferenciar un click en la superficie del user control (controlando el evento MyUserControl.Click), de un click en el botón (controlando el evento MyUserControl.ClickButton).

Saludos
#1256
Cita de: Mendozak47 en  7 Febrero 2018, 20:14 PMsolo consigo que me copie todos los ficheros en uno solo

...por supuesto, estás describiendo precisamente como funciona el comando Copy:   copiar "archivo(s) de origen" a "archivo o directorio destino".

El comando Copy no acepta ningún argumento que te permita insertar un formato de texto al inicio del nombre de cada archivo (de hecho es un poco absurda la idea en la forma que la has planteado, puesto que pretendes que eso suceda sin más, sin darle ninguna indicación especial al comando Copy para que sepa que le estás pidiendo hacer, ni donde insertar el texto si al principio o al final del nombre, no se si me entiendes, no tiene sentido hacer eso), el comando Copy se limita a copiar los archivos encontrados, al destino especificado.

Para hacer lo que pides, necesitas utilizar un búcle de tipo FOR, o FOR /R si quieres realizar una búsqueda recursiva de los archivos. En el bloque de código del FOR renombrarías y copiarias cada archivo, uno a uno.

Te muestro un ejemplo completo:

@Echo OFF & (CHCP 1252)1>Nul
SetLocal EnableDelayedExpansion

Set "stringFormat=%date:~-4,4%-%date:~-7,2%-%date:~-10,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%"

FOR %%# IN (".\%COMPUTERNAME%*.*") DO (
Set "filename=%stringFormat% %%~n#"
Set "fullpath=%%~dp#!filename!%%~x#"
(Copy /Y "%%~f#" "!fullpath!")1>NUL
Echo:"%%~nx#" -^> "!filename!%%~x#"
)

Pause
Exit /B 0


Saludos!
#1257
Cita de: Orubatosu en  7 Febrero 2018, 20:40 PMPara los que no sepan donde está el registro, es tan simple como ejecutar "regedit"

Bueno, para ser más precisos e informar bien al personal evitando dar lugar a malinterpretaciones, me gustaría aclarar que Regedit NO es el registro de Windows, sino un visor que sirve para representar las claves y valores del registro de Windows de forma amistosa, legible y editable.

El registro de Windows no se almacena por si solo en la nube, ni en una dimensión paralela en el espacio de nuestro disco duro, es evidente que no, el registro de Windows se almacena en archivos locales, los cuales están esparcidos por los distintos directorios del sistema de archivos. Los archivos principales que contienen las claves del registro de Windows para todos los usuarios, se encuentran ubicados en el directorio: 'C:\Windows\System32\Config', y son los siguientes:

  • C:\Windows\System32\Config\components
  • C:\Windows\System32\Config\default
  • C:\Windows\System32\Config\drivers
  • C:\Windows\System32\Config\sam
  • C:\Windows\System32\Config\security
  • C:\Windows\System32\Config\software
  • C:\Windows\System32\Config\system

Luego hay ciertos archivos que contienen la configuración del registro de la cuenta de usuario local, o dicho de otro modo: la colmena HKEY_CURRENT_USER (donde se suele encontrar la configuración de los programas instalados, y las personalizaciones al sistema operativo que hayan sido hechas mediante la manipulación del registro de Windows), dicho archivo se encuentra ubicado en el directorio principal de cada cuenta de usuario existente, o dicho de otro modo, en el directorio del perfil de usuario: 'C:\Users\{USUARIO}\ntuser.dat'. En otros directorios hay más archivos 'ntuser.dat', y también 'userclass.dat', ambos contienen distinta información/claves del registro de Windows.

Si un usuario desea llevar a cabo una copia de seguridad física y completa del registro de Windows, entonces ese usuario debería copiar todos los archivos mencionados antes que usar la funcionalidad 'Exportar' del Regedit... solo suponiendo que ese usuario sepa lo que se hace, claro está, de lo contrario recomiendo limitarse a (intentar)exportar e (intentar)importar las claves de una colmena mediante Regedit o su visor de registro favorito.

Saludos!
#1258
Cita de: AlbertoPerez en  6 Febrero 2018, 21:51 PM
en el caso de photoshop, manteniendo la configuración de ventanas, las fotos que he guardado/editado anteriormente a modo de acceso directo para poder abrirlas directamente, etc.

O incluso un videojuego el cual no puedo empezar el modo historia desde el principio desde 0, y lo desinstalo, lo instalo, y sigue guardado todo lo que he hecho.

Ciertos archivos de usuario no se pueden considerar parte de la instalación, ni restos o archivos huérfanos de una desinstalación. Mal software sería Photoshop si al desinstalar te eliminase la configuración de usuario de la UI junto a todos los recursos/pinceles/estilos/gradiantes/materiales que hubieras creado o añadido, o imagínate un videojuego que te eliminase la partida guardada al desinstalarlo... que eso es precisamente lo que a ti te gustaría que hiciera, pero no lo que debe hacer.

Como ya te han dicho, hay programas especializados en desinstalar un programa y buscar restos y eliminarlos durante el procedimiento. Yo uso el Uninstall Tool, pero ten en cuenta que este tipo de programas no son 100% eficientes, pues no pueden identificar archivos huérfanos por arte de mágia de donde no hay registro alguno para obtener... a veces hay tareas que requieren una búsqueda/análisis manual por parte tuya para encontrar archivos huérfanos, y no es algo dificil, los directorios donde puede haber lo que tu consideras como "residuos" se cuentan con los dedos:

1. El directorio de instalación.

2. C:\ProgramData\

3. C:\Users\{USUARIO}\AppData\ (subdirectorios: Local, LocalLow y Roaming)

4. Los directorios de Documentos, Videos e Imágenes del usuario actual, y de la cuenta de usuario 'Public'.

5. En raros casos: C:\Program Files\Common Files y C:\Program Files (x86)\Common Files

Dependiendo del tipo de programa, y de lo bueno o malo que sea desinstalándose asimismo, también podrían dejar archivos huérfanos en varios directorios del sistema ( C:\Windows, C:\Windows\System32 / SysWOW64, C:\Windows\Fonts... ) pero con los directorios que he mencionado creo que es más que suficiente.

Saludos.
#1259
.NET (C#, VB.NET, ASP) / Re: set APPDATA en C#
6 Febrero 2018, 22:09 PM
Cita de: kaiserdj en  6 Febrero 2018, 21:09 PMHe probado el código que me diste, el problema es que no coge como PATH de APPDATA la carpeta "data" si no la carpeta "AppData" por defecto de windows

Por supuesto, el ejemplo que mostré solo era para declarar una variable normal y corriente, no una variable de entorno. No se entendía muy bien lo que querías hacer.

Para crear o modificar una variable de entorno almacenada en el proceso actual, puedes utilizar el método System.Environment.SetEnvironmentVariable().

Código (csharp) [Seleccionar]
string dirpath = Path.Combine(Directory.GetCurrentDirectory(), "data");
Environment.SetEnvironmentVariable("APPDATA", dirpath)

string envValue = Environment.GetEnvironmentVariable("APPDATA");
Console.WriteLine(envValue);


Ten en cuenta que la modificación solo afecta a la instancia del proceso actual, y a los procesos hijos de este, igual que ocurre con la CMD.

Saludos!