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

#5611
Windows / Re: Quiero empezar a programar
23 Febrero 2015, 22:28 PM
Los lenguajes que cumplen las condiciones que has solicitado, es decir, que sea más completo y potente que Batch, que no necesite requisitos adicionales de instalación, que puedas crear "aplicaciones" en Windows,
y comentados por ordén de "dificultad" en la asimilitud de su sintaxis (bajo mi criterio personal, claro está) serían: VisualBasicScript (VBS), Visual Basic for Applications (VBA), javascript (JS), y PowerShell (PS).

Ahora... ¿vale la pena utilizar alguno de los lenguajes mencionados?, pues:

· VBS es un lenguaje desarrollado y orientado exclusivamente a la automatización de tareas de escritorio (como Batch), su propósito indica sus propias limitaciones.
· VBA es un lenguaje que está más orientado a la integración en aplicaciones de terceros (ej: Excel).
· JS es un lenguaje que está más orientado al desarrollo web (páginas web).
· PS es un lenguaje desarrollado y orientados exclusivamente a la automatización de tareas administrativas, su propósito indica sus limitaciones.

Si lo que quieres es utilizar un lenguaje que te sirva para poder hacer todo lo que hacias en Batch pero de una forma más simple, estable, completa y eficiente, entonces ese lenguaje sería VBS, ya que aparte de estar orientado al mismo tipo de programación que Batch, su sintaxis basada en el lenguaje BASIC te podría resultar más beneficiosa y productiva que utilizar símbolos reservados del tipo ":!$%", aunque eso es una característica que todos los lenguajes tienen (Batch y VBS también).

Pero no, no vale la pena utilizar ninguno de esos lenguajes si lo que pretendes es aprender a programar aplicaciones de escritorio por y para la plataforma Windows, eso no son "lenguajes de verdad" que estén cualificados debidamente para dicha tarea.

Mi recomendación personal para esta situación, teniendo en cuenta tu falta de experiencia y tus gustos personales por el tema de la sintaxis, te diría que probases VisualBasic.Net, y si no te gusta su sintaxis, siempre puedes optar por utilizar CSharp, ambos son lenguajes muy potentes basados en la tecnología de .Net Framework y practicamente iguales en funcionalidades pero con una muy diferente sintaxis.

Nota: Si, por supuesto vas a necesitar descargar y utilizar complementos adicionales (una IDE) para desarrollar en estos lenguajes, en este caso puedes utilizar VisualStudio.
Microsoft Visual Studio 2013 Ultimate + Resource Pack (Actualizado 09-Oct-2014)

Nota 2: Espero que de verdad quede muy claro, pero tan claro como el agua, que en el Notepad no te va a servir para programar, ya que Batch no es un lenguaje de programación, es una herramienta básica de automatización de tareas simples.






Te dejo aquí una cosita que estuve escribiendo pero todavía no he acabado... por si te ayuda a elegir la sintaxis de este lenguaje u optar por un lenguaje distinto como por ejemplo el que te ha comentado el compañero @Engel Lex, C++ (o también podrías utilizar VisualStudio para programar en Visual C++, que es distinto).

Cita de: Elektro

Visual Basic.Net

Ejemplos de Sintaxis

String Conditional:
Código (vbnet) [Seleccionar]
Dim str1 As String = "cadena de texto"
Dim str2 As String = "cadena de texto"

If str1.Equals(str2, StringComparison.CurrentCulture) Then
   Console.WriteLine("str1 es igual que str2")
End If


Numeric Conditional:
Código (vbnet) [Seleccionar]
Dim val1 As Integer = 1
Dim val2 As Integer = 2

If val1 = val2 Then
   Console.WriteLine("val1 es igual que val2")
End If


Multi-Conditionals:
Código (vbnet) [Seleccionar]
Dim val1 As Integer = 0
Dim val2 As Integer = 0
Dim val3 As Integer = 0

If (val1 > val2) AndAlso Not (val1 >= val3) Then
   Console.WriteLine("val1 es mayor que val2, y menor que val3")

ElseIf (val1 < val2) OrElse (val1 = val3) Then
   Console.WriteLine("val1 es menor que val2, o igual que val3.")

Else
   Console.WriteLine("Condición no controlada.")

End If


For Loop:
Código (vbnet) [Seleccionar]
Dim strings As IEnumerable(Of String) = {"string1", "string2"}

For Each str As String In strings
   Console.WriteLine(str)
Next str


Error-Handling:
Código (vbnet) [Seleccionar]

' Un objeto disposable cualquiera.
Dim object As New Process

Try
   object.StartInfo.FileName = "Notepad.exe"
   object.Start()

Catch ex As Exception
   MessageBox.Show(text:=ex.Message,
                   caption:="Título de la ventana",
                   buttons:=MessageBoxButtons.OK,
                   icon:=MessageBoxIcon.Error)

Finally
   If object IsNot Nothing Then
       object.Dispose()
   End If

End Try


Integrated Development Environments (IDES)



Microsoft Visual Studio



Microsoft Visual Studio, también conocido como VisualStudio, o VS, es considerada la IDE más avanzada, profesional, y popular para el desarrollo con VB.Net (entre otros lenguajes).

VisualStudio es un producto de la compañía Microsoft, con un elevado precio, pero también se distribuye en ediciones gratuitas, la edición Express, y la edición Community.

Tengo entendido que las ediciones gratuitas carecen de algunas herramientas importantes de depuración, profilling, otros tipos de análisis, y protección/ofuscación, que solo se pueden encontrar en la edición de pago, pero aun siendo así, la edición gratuita de VisualStudio es la IDE más completa hasta día de hoy que cubre todas las necesidades del programador más exquisito sin necesidad de depender de herramientas de terceros en la mayoría de circunstancias básicas.

La IDE de Microsoft está orientada para todo tipo de niveles de experiencia, y para todo tipo de desarrollo, como el desarrollo de aplicaciones de escritorio, aplicaciones web, y aplicaciones móviles.


Imágenes de Microsoft Visual Studio







⇲ Links de interés sobre Microsoft Visual Studio



MonoDevelop



MonoDevelop es la alternativa gratuita a VisualStudio,
algunas personas suelen preferir esta IDE ya que utiliza menos recursos que VisualStudio, pero también es una IDE menos estilizada y bastante incompleta en comparación con la inmensa cantidad de características que ofrece VisualStudio.

MonoDevelop es una IDE multi-plataforma, a diferencia de VisualStudio, que solo se puede usar bajo Windows.


Imágenes de MonoDevelop







⇲ Links de interés sobre MonoDevelop

#5612
Windows / Re: problema con archivos en papelera
23 Febrero 2015, 21:34 PM
Cita de: elezekiel en 23 Febrero 2015, 21:00 PM
rutadel archivo o directorio que debo poner? porque esta en la papelera pero desconozco donde nace el problema

edito, no logro entender como usarlo, hice el script y lo guarde como cmd pero no se como proseguir.. disculpaaass

Hola

He actualizado el código que publiqué en el post de arriba para que pueda procesar un directorio con sus subdirectorios y archivos, asegúrate de actualizar el código que guardaste antes de utilizar, el otro código estaba algo limitado.

Si tienes Windows Vista o posterior, entonces utilízalo de esta manera:
TaleOwn.cmd "C:\$Recycle.Bin\"

Si por lo contrario tienes Windows XP, utilízalo así:
TaleOwn.cmd "C:\Recycler\"

Y para eliminar los archivos del interior (despues de haber obtenido los permisos de acceso), en Win Vista/7/8:
RD /Q /S "C:\$Recycle.Bin\"
o Win XP:
RD /Q /S "C:\Recycler\"

Nota: Ignora cualquier posible aviso de "la papelera está dañada" al aceptar la eliminación de los archivos cuando los recicles por primera vez, es debido a las modificaciones del propietario y los permisos en una carpeta "especial" del sistema, pero el directorio y su estructura se restaurará por si solo al aceptar el aviso.

Saludos
#5613
Windows / Re: problema con archivos en papelera
23 Febrero 2015, 20:56 PM
Prueba a obtener los permisos necesarios para el acceso al directorio y sus archivos.

Puedes utilizar el siguiente Script escrito en Batch.

Modo de empleo:
TakeOwn.cmd "Ruta del archivo o directorio" "Nombre de usuario (opcionalmente)"

Ejemplo:
TakeOwn.cmd "C:\$Recycle.Bin\S-1-5-21-1780771175-1208154119-2269826705-500\" "%Username%"
TakeOwn.cmd "C:\Archivo.ext" "%Username%"

Source:
TakeOwn.cmd
Código (dos) [Seleccionar]
@Echo OFF & (CHCP 1252)1>Nul
Title Simple Take Ownership Batch-Script Automation, By Elektro.

If "%~1" NEQ "" (
Set "ItemPath=%~f1"
) Else (
Echo [x] Any path pattern specified.
Exit /B 1
)

If "%~2" NEQ "" (
Set "UserName=%~2"
) Else (
REM Do Nothing, default username will be used.
)

:: Determino si el elemento es un directorio.
If Exist "%ItemPath%\" (
Set "takeownDirectoryParams=/R /D /S"
Set "icaclsDirectoryParams=/T"
) Else (
Set "takeownDirectoryParams="
Set "icaclsDirectoryParams="
)

(TakeOwn.exe /F "%ItemPath%" %directoryParams%)1>Nul 2>&1 || (
Echo [x] Error Taking Ownership.
Exit /B 1
)

(ICacls.exe "%ItemPath%" /Grant "%UserName%":"F" %icaclsDirectoryParams%)1>Nul 2>&1 || (
Echo [x] Error setting user permissions.
Exit /B 1
)

:: Elimino el atributo de sistema, y solo lectura.
(Attrib.exe -S -R "%ItemPath%")1>Nul 2>&1 || (
Echo [x] Error Setting item attributes.
Exit /B 1
)

Echo [i] Access granted for user "%UserName%" in element: "%ItemPath%".
Exit /B 0


Saludos
#5615
Cita de: cixert en 23 Febrero 2015, 03:31 AM
¿pero se trata realmente de un cambio de ciclo?
Es decir, ¿hay novedades estructurales en el sistema...?

Esteticamente hablado, podemos decir que "no", ya que tendrá el aspecto de Windows 8/8.1 pero con ínfimas modificaciones de diseño.

Internamente hablando, Windows 10, a diferencia de sus antecesores, será un único S.O. que estará desarrollado a partir de un código base unificado para soportar cualquier dispositivo, cómo PC, smartphone, tablet, laptop, TV, y consolas (y no se si me dejo algo por nombrar), una plataforma para todos los dispositivos, así que el cambio "estructural" es lo más amplio que te puedas imaginar.

...Aparte del resto de noveades y mejoras del SO, como por ejemplo soporte para utilizar atajos del teclado en la CMD, o el nuevo modelo de aplicaciones llamado "Windows Universal apps", que no son más que las conocidas Metro/Modern Apps, pero cómo su nombre indica, serán aplicaciones universales para todos los dispositivos que usen Windows.
Y un largo etc.

Saludos
#5616
Scripting / Re: Programar en Batch
22 Febrero 2015, 20:53 PM
Cita de: NoSuBa en 22 Febrero 2015, 20:44 PM
Gracias Elektro, me gustan los dos primeros comandos. El otro, seguramente funcionará mejor y todo eso, pero no entiendo lo que escribes ahí (los comandos), y prefiero saber lo que hace lo que programo. Muchas Gracias de todas fromas.  :D ;D ;D ;D

Lo que hago es asignar una cadena delimitada por comas (CSV) que contiene las rutas de los directorios, podriamos decir que es una simulación de una especie de Array limitado, e itero los elementos con el For para copiar el archivo a cada directorio especificado en el ""Array"".
Si tienes muchos directorios entonces esa metodología te ahorraría mucha repetición de código en una herramienta limitada cómo es Batch.

Aparte de lo que te ha comentado el compañero @Engel Lex, también puedes mirar la documentación interna de la CMD.

En consola:
For /?

Saludos
#5617
Scripting / Re: Programar en Batch
22 Febrero 2015, 20:40 PM
La expresión ".\" indica el directorio de trabajo actual, por lo tanto solo tienes que reemplazar los síbolos "¿?" por ".\", es decir, esta ruta:
".\Archivo1.bat"

...O también puedes utilizar la variable dinámica "%CD%"
Echo "%CD%\Archivo1.bat"

Pero déjame decirte que la mecánica del código que has expuesto no es del todo correcta ya que puedes saltarte el paso de mover, copiando directamente a los directorios destino:
Código (dos) [Seleccionar]
@Echo OFF

Set "dirPaths=%UserProfile%\Desktop;%HomeDrive%"
Set "fileName=%~nx0"

For %%d in (%dirPaths%) Do (
   Copy /Y "%~f0" "%%d\%fileName%"
)

Pause&Exit /B 0


Saludos
#5618
Scripting / Re: Ayuda con Bat o Vbs
22 Febrero 2015, 20:27 PM
CitarCual seria la modificación a realizar en tu excelente código Elektro para poder sacar el valor de un Archivo1.txt que contenga:

<b>Cash Out: </b> 1.97x </p>
<b>Cash Out: </b> 212.34x </p>

Para sacar el "1.97" usa esta expresión:
Código (vb) [Seleccionar]
rgx.Pattern = "(cash.+out.+\s+)([\d\.]+)"

Si quieres sacar el "1.97" incluyendo la "x" (que no se a que hace referencia), usa esta expresión:
Código (vb) [Seleccionar]
rgx.Pattern = "(cash.+out.+\s+)([\d\.]+[^\s])"

Como he disminuido la cantidad de grupos de la expresión (para no hacer demasiado compleja la expresión regular por las etiquetas Html), debes usar esta modificación también:
Código (vb) [Seleccionar]
rgxValue = rgxMatch.Submatches(1)

Saludos
#5619
No te recomiendo utilizar una herramienta limitada como es Batch para este tipo de tareas, por no decir que además es muy lento al procesar texto.

Te muestro un ejemplo que puedes adaptar a tus necesidades por ti mismo:


Source



Código (dos) [Seleccionar]
@Echo OFF & SetLocal EnableDelayedExpansion

Set    "inputFile=.\Archivo.txt"
Set /A "fileCount=1"

Echo [+] ".\ZZZ%fileCount%.txt"
For /F "UseBackQ Tokens=* Delims=" %%a In ("%inputFile%") Do (

Set "line=%%~a"
Echo !line!
(Echo !line!)>>".\zzzz!fileCount!.txt"
If /I "!line:~0,4!" EQU "N490" (
Set /A "fileCount+=1"
Echo+
Echo [+] ".\ZZZ!fileCount!.txt"
)

)

Pause&Exit /B 0



Output



[+] ".\ZZZ1.txt"
ZZZ
X0.0  Y0.0  Z30.0
M601
M2
G0 Z-100.0
N1  G1 X240.1 Y324.9 Z3.6 F2
N2  G1 X239.5 Y325.5 Z4.9 F2
N3  G1 X238.8 Y326.1 Z4.9 F2
N4  G1 X238.2 Y326.8 Z2.4 F2
N5  G1 X237.6 Y327.4 Z1.4 F2
N6  G1 X247.5 Y317.5 F2
N490  G1 X240.7 Y324.3 Z0.5 F2

[+] ".\ZZZ2.txt"
N1  G1 X240.1 Y324.9 Z3.6 F2
N2  G1 X239.5 Y325.5 Z4.9 F2
N3  G1 X238.8 Y326.1 Z4.9 F2
N4  G1 X238.2 Y326.8 Z2.4 F2
N5  G1 X237.6 Y327.4 Z1.4 F2
N6  G1 X237.0 Y328.0 Z0.9 F2
N490  G1 X236.4 Y328.6 Z0.7 F2

[+] ".\ZZZ3.txt"
N1 G1 X235.7 Y329.2 Z3.3 F2
N2  G1 X235.1 Y329.8 Z4.1 F2
N3  G1 X234.5 Y330.5 Z0.8 F2
N4  G1 X233.9 Y331.1 Z1.7 F2
N5  G1 X233.3 Y331.7 Z4.9 F2
N6  G1 X232.6 Y332.3 Z3.7 F2
N490  G1 X232.0 Y332.9 Z1.1 F2

[+] ".\ZZZ4.txt"
N1  G1 X231.4 Y333.6 Z0.6 F2
N2  G1 X230.8 Y334.2 Z0.6 F2
N3  G1 X230.2 Y334.8 Z4.2 F2
N4  G1 X229.6 Y335.4 Z5.0 F2
N5  G1 X228.9 Y336.0 Z5.0 F2
N6  G1 X228.3 Y336.7 Z5.0 F2
N490  G1 X226.5 Y338.5 Z1.0 F2

[+] ".\ZZZ5.txt"
G0 Z-100.0
G0 Y0
Presione una tecla para continuar . . .
#5620
Activa la cuenta oculta "Administrador", es una cuenta que tiene ese nombre, y a diferencia de las demás cuentas del grupo Adminisradores, tiene más privilegios sobre todas las acciones.

En consola:
Net User "Administrador" /Active:"Yes"

Cierra sesión y logueate en la nueva cuenta "Administrador".

Saludos