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

#8041
Programación General / Re: Ayuda xcopy batch
17 Septiembre 2013, 21:09 PM
Cita de: N@5h en 17 Septiembre 2013, 18:53 PMsabes que estoy probando y no me sale...

me lo cierra directamente o tira error de la forma que prueve ponerlo...

Muestra tu código, estás cometiendo algún error de sintaxis

saludos!
#8042
Scripting / Re: [BATCH] Duda
17 Septiembre 2013, 20:11 PM
Cito:
Cita de: EleKtro H@cker en 17 Septiembre 2013, 04:54 AMLee acerca del comando Setlocal EnableDelayedExpansion y su utilización.

Pon un poco de tu parte, Google it! :P: http://ss64.com/nt/delayedexpansion.html

La explicación del operador "!" la encontrarás en el mismo enlace de arriba, y aquí tienes más explicaciones sobre los ops que comentas:

By Elektro H@cker: Tutorial extendido de aprendizaje Batch
3.7 Memorizar


By Elektro H@cker: Tutorial extendido de aprendizaje Batch
4.8 Otros operadores


By Elektro H@cker: Tutorial extendido de aprendizaje Batch
6.3 Variables expandidas


saludos
#8043
Cita de: ABDERRAMAH en 17 Septiembre 2013, 02:59 AMPues yo echo mano de este hilo de vez en cuando, hay cosas muy útiles.

se agradece también!






·  Devuelve la conversión de bytes a la unidad de tamaño más aproximada

Por ejemplo, si le pasamos "60877579" bytes, nos devuelve este string: "58,06 MB"

Código (vbnet) [Seleccionar]
 #Region " Round Bytes "

   ' [ Round Bytes Function ]
   '
   ' // By Elektro H@cker
   '
   ' Examples :
   '
   ' MsgBox(Round_Bytes(1023))             ' Result: 1.023 Bytes
   ' MsgBox(Round_Bytes(80060, 1))         ' Result: 78,2 KB
   ' MsgBox(Round_Bytes(60877579))         ' Result: 58,06 MB
   ' MsgBox(Round_Bytes(4485888579))       ' Result: 4,18 GB
   ' MsgBox(Round_Bytes(20855564677579))   ' Result: 18,97 TB
   ' MsgBox(Round_Bytes(990855564677579))  ' Result: 901,18 PB
   ' MsgBox(Round_Bytes(1987464809247272)) ' Result: 1,77 PB

   Enum xByte As Long
       kilobyte = 1024L
       megabyte = 1024L * kilobyte
       gigabyte = 1024L * megabyte
       terabyte = 1024L * gigabyte
       petabyte = 1024L * terabyte
   End Enum

   Private Function Round_Bytes(ByVal bytes As Long, _
                                 Optional ByVal decimals As Integer = 2 _
                                 ) As String

       Select Case bytes

           Case Is >= xByte.petabyte
               Return String.Format("{0} PB", (Convert.ToDouble(bytes) / xByte.petabyte).ToString("n" & decimals))

           Case Is >= xByte.terabyte
               Return String.Format("{0} TB", (Convert.ToDouble(bytes) / xByte.terabyte).ToString("n" & decimals))

           Case Is >= xByte.gigabyte
               Return String.Format("{0} GB", (Convert.ToDouble(bytes) / xByte.gigabyte).ToString("n" & decimals))

           Case Is >= xByte.megabyte
               Return String.Format("{0} MB", (Convert.ToDouble(bytes) / xByte.megabyte).ToString("n" & decimals))

           Case Is >= xByte.kilobyte
               Return String.Format("{0} KB", (Convert.ToDouble(bytes) / xByte.kilobyte).ToString("n" & decimals))

           Case Is >= 0
               Return String.Format("{0} Bytes", Convert.ToDouble(bytes).ToString("n0"))

           Case Else
               Return String.Empty

       End Select

   End Function

#End Region
#8044
En el hipotético caso de que la impresora active algún servicio de forma automática justo antes de imprimir entonces sería una tarea sencilla de realizar, monitorizando el estado del servicio (Started/Stopped) filtrando la salida del comando SC con un scrpit Batch.

No me cuesta nada mostrarte un ejemplo, pero es que lo de que la impresora active por si mismo el servicio de cola de impresión u otros servicios de terceros es solo una hipótesis, así que no quiero codear en vano :P.

Puedes hacer una prueba, en el panel de servicios de Windows (services.msc) busca servicios instalados por tu software de impresora (si es que utilizas algun software de terceros) y detén esos servicios, además detén estos dos servicios:

· Cola de impresión
· Extensiones y notificaciones d eimpresora

Cuando los hayas detenido todos, intenta hacer una impresión, si no funciona, activa el servicio de "cola de impresión" (porque me parece que la impresora no puede activar el servicio de forma automática) y prueba con el resto de servicios detenidos.

En fín lo suyo es comprobar si alguno de los servicios se activa por si solo para realizar la impresión, con eso sería suficiente para codear el Batch.

Saludos!
#8045


Descripción:

ShellInfo es una aplicación command-line que devuelve información específica de un archivo o de un directorio:

· Ruta absoluta
· Directorio
· Nombre de archivo
· Nombre de carpeta
· Tamaño (en bytes)
· Fecha de creación
· Fecha de Modificación
· Fecha de último acceso
· Lista de archivos

La aplicación está pensada para integrarla en el menú contextual de Windows, aunque también se puede usar de forma manual desde la consola para automatizar otro tipo de tareas.


Demostración:

( ATENCIÓN, ESTE VIDEO ES DE LA ANTIGUA VERSIÓN V1.0 )
[youtube=640,360]http://www.youtube.com/watch?v=nwNnkDDrLJM[/youtube]



Descarga:

Código fuente:

Instalador con integración en el menú contestual de Windows:
#8046
Menu en cascada para Windows 8 - Copiar Información



Imágenes:




Opción "Reporte completo" para carpetas:

Nombre de carpeta: Debug

Ruta completa...: C:\Visual Studio Projects\CopyPath\CopyPath\bin\Debug
Letra de unidad.: C:\

Fecha de creación.....: 15/09/2013 16:03:19
Fecha de modificación.: 17/09/2013 8:40:55
Fecha de último acceso: 17/09/2013 8:40:55

Longitud de ruta completa....: 53
Longitud de nombre de carpeta: 5

Tamaño en Bytes....: 155.002 Bytes
Tamaño en Kilobytes: 151,37 KB
Tamaño en Megabytes: 0,15 MB
Tamaño en GigaBytes: 0,00 GB
Tamaño en TeraBytes: 0,00 TB



Opción "Reporte completo" para archivos:

Nombre de archivo: CopyInfo.exe

Ruta completa...: D:\Utilidades\Registros\Menú contextual\CopyInfo.exe Setup\{sys}\CopyInfo.exe
Directorio......: D:\Utilidades\Registros\Menú contextual\CopyInfo.exe Setup\{sys}
Letra de unidad.: D:\

Extensión de archivo: exe
Atributos de archivo: Archive, NotContentIndexed
Versión de archivo..: 1.0.0.0

Fecha de creación.....: 16/09/2013 21:39:42
Fecha de modificación.: 17/09/2013 8:33:01
Fecha de último acceso: 16/09/2013 21:39:42

Longitud de ruta de acceso...: 85
Longitud de directorio.......: 72
Longitud de nombre de archivo: 12

Tamaño en Bytes....: 35.840 Bytes
Tamaño en Kilobytes: 35,00 KB
Tamaño en Megabytes: 0,03 MB
Tamaño en GigaBytes: 0,00 GB
Tamaño en TeraBytes: 0,00 TB



También pueden aprovecharse de su utilización para automatizar otro tipo de tareas, por consola:

Citar ______                      _______         ___
|      |.-----.-----.--.--. |_     _|.-----.'  _|.-----.
|   ---||  _  |  _  |  |  |  _|   |_ |     |   _||  _  |
|______||_____|   __|___  | |_______||__|__|__|  |_____|
             |__|  |_____| By Elektro H@cker


[+] Syntax:

   CopyInfo.exe [Switch] [FILE or FOLDER]


[+] Switches:

   /?            | Display this help
                 |
   /fullname     | Return Full path
   /filename     | Return Filename (including extension)
   /Dir          | Return Directory name
   /Size         | Return Size (In bytes)
   /Attrib       | Return Attributes
   /CreationTime | Return Creation date
   /ModifyTime   | Return Modification date
   /AccessTime   | Return Last access date
   /FullnameLen  | Return Full path length
   /FilenameLen  | Return Filename  length
   /DirLen       | Return Directory length
   /FileList     | Return directory file list
   /FileListRec  | Return directory file list (recursive)
   /Report       | Return a report with all of this and additional info.
                 |
   /C            | Send the info to Clipboard.
                 | NOTE: Use this switch as last argument.


[+] Usage examples:

   Program.exe /fullname ".\File.txt"
   # Returns the full path. (Ex: C:\File.txt)

   Program.exe /fullname ".\File.txt" /C
   # Returns the full path and copy it into Clipboard. (Ex: C:\File.txt)

   Program.exe /drive "C:\File.txt"
   # Returns the drive letter. (Ex: C:\)

   Program.exe /size "C:\File.txt"
   # Returns the size in bytes. (Ex: 100024)



Demostración:

[youtube=640,360]http://www.youtube.com/watch?v=nwNnkDDrLJM[/youtube]



Instrucciones:

1. Descargar el siguiente archivo:

-> Para Windows 8 64 Bit

2. Descomprimirlo, acceder a la carpeta que se llama "Installer", y ejecutar el archivo.



Que lo disfruten!
#8047
Programación General / Re: Ayuda xcopy batch
17 Septiembre 2013, 15:04 PM
Cita de: N@5h en 17 Septiembre 2013, 12:24 PMquiero no tener q apretar la "N" cada ves q pregunta si deseo remplazar un archivo...

como seria /?

Es algo tan sencillo como redirigir la pulsación de la tecla "N" al UserInput del comando XCopy:

Echo N| XCOPY /E /-Y ".\Dir1\*" ".\Dir2\"

Saludos!






EDITO:

Tema aparte...

Citar

...Por dios!!!

Permíteme que corrija tremenda catástrofe con toda mi buena intención:

TODOS LOS ARCHIVOS HAN SIDO COPIADOS SATISFACTÓRIAMENTE

Saludos!
#8048
Citar
Código (csharp) [Seleccionar]
"NetConnectionStatus=2 and AdapterType='" + adapterType + "'")

Debes especificar el keyword "WHERE", y luego concatenar con "AND".

Código (csharp) [Seleccionar]
"WHERE NetConnectionStatus='2' and AdapterType='" + adapterType + "'")

Por lo demás lo veo bien, si estás usando Windows 8 entonces deberías usar la Class MSFT_NetAdapter.

Te muestro como lo hice en VB.NET:



Código (vbnet) [Seleccionar]
       Dim QueryFormat As String = _
           String.Format( _
           "SELECT {0} FROM Win32_NetworkAdapter WHERE AdapterType = '{1}' And NetConnectionStatus = '{2}'", _
           "AdapterType,NetConnectionID,NetConnectionStatus", _
           "Ethernet 802.3", _
           "2" _
           )

       Dim Query As New ObjectQuery(QueryFormat)
       Dim Searcher As New ManagementObjectSearcher(Query)

       For Each result As ManagementObject In Searcher.Get


           MsgBox(String.Format(" NetConnectionID: {1}{0} NetConnectionStatus: {2}{0} AdapterType: {3}{0}", _
                                Environment.NewLine & Environment.NewLine, _
                                result.Item("NetConnectionID"), _
                                result.Item("NetConnectionStatus"), _
                                result.Item("AdapterType")))

           Try
               result.InvokeMethod("Disable", Nothing)
           Catch ex As Exception
               MessageBox.Show(ex.Message)
           End Try

       Next




Traducción a C# (No lo he testeado):

Código (csharp) [Seleccionar]

string QueryFormat = string.Format("SELECT {0} FROM Win32_NetworkAdapter WHERE AdapterType = '{1}' And NetConnectionStatus = '{2}'", "AdapterType,NetConnectionID,NetConnectionStatus", "Ethernet 802.3", "2");

ObjectQuery Query = new ObjectQuery(QueryFormat);
ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Query);


foreach (ManagementObject result in Searcher.Get) {

Interaction.MsgBox(string.Format(" NetConnectionID: {1}{0} NetConnectionStatus: {2}{0} AdapterType: {3}{0}", Environment.NewLine + Environment.NewLine, result.Item("NetConnectionID"), result.Item("NetConnectionStatus"), result.Item("AdapterType")));

try {
result.InvokeMethod("Disable", null);
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}

}

//=======================================================
//Service provided by Telerik (www.telerik.com)
//Conversion powered by NRefactory.
//Twitter: @telerik
//Facebook: facebook.com/telerik
//=======================================================



Saludos!
#8049
Scripting / Re: Personalizar Batch
17 Septiembre 2013, 05:08 AM
@Pedrín-2

Porfavor vuelve a leer los comentarios que te dejé escritos en el script,
Te comenté cual es el problema exacto aquí:

START EXPLORER %cadena%

La variable, es decir, el argumento de la ruta de acceso, debes encerrarlo usando comillas dobles:

Código (dos) [Seleccionar]
Explorer.exe /select,"%cadena%"






Supongamos que el valor de la variable cadena es este:
Código (dos) [Seleccionar]
Set "Cadena=C:\Carpeta con espacios"

Entonces si tu haces esto:
Código (dos) [Seleccionar]
Explorer.exe %Cadena%
(Que es lo mismo que hacer esto:)
Código (dos) [Seleccionar]
Explorer.exe C:\Carpeta con espacios

Estás pasándole 3 argumentos al proceso:
1. C:\Carpeta
2. con
3. espacios


Como el explorer.exe no puede encontrar el directorio especificado (Primer argumento: "C:\Carpeta") entonces por defecto te redirige a la localización de "mis documentos".

Pero si tu haces esto otro:
Código (dos) [Seleccionar]
Explorer.exe "%cadena%"
(Que es lo mismo que hacer esto:)
Código (dos) [Seleccionar]
Explorer.exe "C:\Carpeta con espacios"

Ahora le estás pasando un único argumento y te va a abrir la localizión del directorio especificado (siempre que el directorio exista):
C:\Carpeta con espacios



NOTA: Lo de las comillas dobles debes aplicarlo a "TODO".



un saludo
#8050
Scripting / Re: [BATCH] Duda
17 Septiembre 2013, 04:54 AM
Cita de: Hyakutake07 en 16 Septiembre 2013, 21:02 PMporque no funciona el "set m=%t:~0,x%" (Es decir, porque  
la x no actua como variable)

Lo primero de todo es que en ese ejemplo estás escribiendo una x literal, no una variable.

Una x:
x

Una variable:
%x%

Entonces añadiendo los caracteres que faltan, nos quedaría así la sintaxis:

%t:~0,%x%%

Pero de todas formas los caracteres "%" de inicio y fin de variable de la variable "%X%" entrarían en conflicto con los caracteres "%" de la otra variable "%T%", y esto es lo que conseguirías:

%t:~0,%x%%

Lo que he marcado en rojo es lo que Batch tomaría como la primera variable, desde el primer caracter "%" hasta el segundo "%",
lo que he resaltado en en verde se tomaría como un string,
y lo que he resaltado en amarillo es lo que se tomaría como otra variable, o en este caso como un escape del operador "%".

Como puedes entender a simple vista eso no podría funcionar jamás porque como resultado se habrán parseado mal los datos, obteniendo más datos y variables de las que en realidad tenemos.

Entonces al intentar realizar el substring (var:~0,1) y al intentar mostrar el resultado con "echo %m%", esto es lo que Batch te mostraría:
x%

El string (x) y el operador escapado % (%%), eso es lo que Batch ha podido entender.

Es por esa razón que se deben expandir las variables en tiempo de ejecución en lugar de parsearlas,
o en su defecto también podemos usar la recursividad con el comando Call para parsear las variables.

Lee acerca del comando Setlocal EnableDelayedExpansion y su utilización.

Te muestro dos alternativas funcionales:

Código (dos) [Seleccionar]
@Echo OFF
setlocal enabledelayedexpansion
set /A "x=0"
set "t=Bienvenido"
set /a "x+=1"
set "m=!t:~0,%x%!"
echo %m%
Pause&Exit


Código (dos) [Seleccionar]
@Echo OFF
set /A "x=0"
set "t=Bienvenido"
set /a "x+=1"
call set "m=%%t:~0,%x%%%"
echo %m%
Pause&Exit


Saludos.