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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 1235
31  Informática / Software / Re: MusiCloud - Mi Nuevo Cliente de YT en: 24 Marzo 2024, 04:46 am
Hmmm... el nombra DragonTube está genial, pero MusiCloud... esa "C" que falta en la palabra "Music" y que colisiona con la "C" de la palabra "Cloud" es bastante problemática, se siente muy raro al pronunciar "Musi Cloud" o "Music Cloud". Lo suyo sería llamarlo SoundCloud, que además son dos palabras que se parecen y riman, el úico problema es que el nombre ya está pillado por cierta plataforma archiconocida. :xD

Quizás sea muy tarde para cambiarle el nombre o no te apetezca ponerle un nombre diferente, pero de todas formas te propongo algunas ideas de nombres que me parecen llamativos y con "gancho":


  • StreamCloud ("Estrimclaud")
  • FlowCloud   ("Flouclaud")
  • RhythmCloud ("Ridomclaud")
  • GrooveCloud ("Grubclaud")
  • TuneCloud   ("Tunclaud")


Y si cambiamos "Cloud" por "Tube", algunos de los nombres siguen sonando bien, al menos en mi opinión.



En torno al programa, la interfaz de usuario se ve genial, ahora bien, si el programa es gratuito pero no hay source disponible, eso puede generar cierta desconfianza en un foro de hacking xD. Pero estás en todo tu derecho de no querer compartir el source y nadie debería cuestionarlo, además, y como ya dijiste, compartiste el código fuente de otros proyectos tuyos, en GitHub.

Un saludo y sigue compartiendo herramientas así.
32  Informática / Hardware / Re: Verificar algun componente dañado en: 24 Marzo 2024, 03:54 am
veo que los fps se me limitan automáticamente a 60 el juego empieza a ir como trancado, como si en vez de 60 FPS que dice el juego fuera a 50, pero técnicamente esta limitado a 80.

En un video juego, la opción de limitar los FPS se refiere a establecer un límite máximo permitido, es decir, no se aplica una restricción para que el video juego funcione como mínimo a X FPS, sino que se indica que como máximo podrá funcionar a X FPS, es decir, que tu video juego está limitado a un máximo de 80 FPS.

Si no hubiera un límite máximo, el video juego funcionaría lo más rápido posible. Seguramente hayas visto video juegos que ofrecen una opción con nombre similar a: "Sin límite de FPS".

Si los componentes de tu PC tienen la capacidad de hacer funcionar el juego a esos 80 FPS, ese se podrá considerar el límite máximo permitido en este caso, y el juego (la API de DirectX o lo que sea) hará lo posible para que se mantenga estable a ese valor máximo especificado, sin exceder los 80 FPS, pero eso no significa que el juego no pueda funcionar por debajo de esos 80 FPS en momentos de sobrecarga...



Cuando el video juego disminuye de ese límite máximo de 80 FPS, es por que existe un factor obstruyente que está mermando la velocidad de respuesta del proceso. Esto puede deberse a una infinidad de factores, entre ellos el propio video juego, mediante la carga de texturas en zonas de mapas, etc, y suele ser algo temporal (hasta que la carga finaliza).

También puede deberse a diversas operaciones que pueden estar ocurriendo en tu PC en segundo plano mientras juegas. Por eso, en tu caso, te convendría detener cualquier servicio de Windows que no te sea necesario utilizar mientras juegas, y cerrar cualquier aplicación que no necesites tenerla ocupando RAM y realizando operaciones en el disco mientras juegas.

No hay mucho más que poder hacer, el rendimiento (FPS) a la hora de jugar depende de las capacidades y la configuración de los componetes de tu PC, de la configuración del S.O, y de la configuración gráfica del video juego.



el juego empieza a ir como trancado, como si en vez de 60 FPS que dice el juego fuera a 50

Como he indicado, y precisamente si notas que va a "trancazos" de forma momentanea, puede debrse a que el video juego está cargando recursos, y durante la carga el tiempo de respuesta del video juego disminuya temporalmente hasta los 60 FPS, hasta que finalice la carga.

Entre jugar a 50 y 60 FPS prácticamente no notarías la diferencia a menos que grabases un video a 50, otro a 60, y comparases las diferencias en la velocidad de movimientos, por que los sentidos se acostumbran de forma inmediata a los 50 FPS sin notar mucha diferencia comparado con 60 FPS.

Si jugases a 30 FPS, ahí sí, se notaría cierta sensación de ralentización (en comparación con jugar a 50, y 60 FPS), pero tampoco daría la sensación de que vaya a "trancazos". Muchisimos video juegos están limitados a 30 FPS, y en las consolas de antaño, como la PlayStation (PAL), se jugaban perfectamente.

El efecto de un salto de frames o "trancazos" se asocia más con lo que te he explicado, operaciones que obstruyen el tiempo de respuesta del proceso del video juego. Ahora, lo que debes averiguar, es lo que puede estar causando esa obstrucción.



No voy a mencionar ninguna sugerencia relacionada con la revisión del hardware, por que no está del todo claro si los "trancazos" provienen por la carga del propio juego, o por un cuello de botella causado por incapacidades del hardware y/o por programas que tengas corriendo en segundo plano.

En cualquier caso, te he indicado lo que te conviene hacer en torno a la desactivación de servicios de Windows y el cierre de programas innecesarios. Esto es esencial.

Otra cosa que puedes hacer, es ajustar las opciones de la gráfica fuera del video juego (en una tarjeta gráfica nVidia, mediante el panel de control de nVidia) para disminuir la calidad gráfica general, y así aumentar el tiempo de respuesta en general.

Aténtamente,
Elektro.
33  Sistemas Operativos / Windows / Re: Dudas sobre Tiny10 (Windows modificado) en: 22 Marzo 2024, 22:32 pm
Tiny10 es una versión altamente capada (aunque eso no tiene por que ser algo positivo), sin Windows Defender, Windows Update, BitLocker, sin servicios de telemetría y sin otros muchos componetes y servicios que corren en segundo plano. Todo esto, en términos generales, y comparándolo en igualdad de condiciones con una instalación por defecto de Windows 10 de fábrica, Tiny10 siempre va a suponer que se realizarán menos operaciones simultáneas sobre la RAM y la CPU.

Ahora bien, eso es una cosa, y el rendimiento energético es otra, por que la CPU y la RAM van a estar funcionando igualmente y prácticamente a la misma potencia. La CPU no va a poner todos los cores a funcionar en máxima potencia por usar un Windows 10 de fábrica, lo que pasa es que va a ejercer menor carga de operaciones por servicios que han sido eliminados en Tiny10, al igual que las tarjetas RAM, se ocupará menos espacio libre, pero la relación entre la utilización de recursos (CPU y RAM) y el rendimiento energético no tiene por que tener el impacto que te has pensado.

Te pongo un ejemplo. Ya sea en Tiny10 o en Windows 10 de fábrica, si tu inicias un video juego moderno de estos que chupan mucha GPU, mucha CPU y mucha RAM, no va a haber diferencia alguna, todo irá a máxima potencia. Si inicias un proceso para codificar un video, la la CPU irá a máxima potencia (o la GPU si codificas en modo GPU) ya uses Tiny10 o Windows 10 de fábrica, etc.

Cuando se habla de versiones ligeras de Windows, siempre se habla en términos de optimización de la utilización de recursos de CPU y RAM por los componentes que se han eliminado en estas versiones ligeras, por que es cierto que, dependiendo de cuantos componentes se eliminen, el sistema operativo se vuelve más responsivo, sin embargo, nunca jamás he oído hablar en términos de mejoría de temperaturas, y supongo que esto será por que en términos generales no habrá diferencia alguna, o el margen será tan ínfimo que la comparación no merece la pena.

De todas formas yo no soy técnico de PC, así que mi opinión es puramente especulativa. Puedo estar equivocado con alguna o todas mis conclusiones. No me dedico a analizar las temperaturas de diferentes configuraciones como lo pueda hacer un profesional en su laboratorio (cuado digo esto, me imagino a un especialista tipo "Toro Tocho Reviews").

Aténtamente,
Elektro.
34  Seguridad Informática / Análisis y Diseño de Malware / Re: Disable Windows Defender + UAC Bypass, + Upgrade to SYSTEM en: 22 Marzo 2024, 10:56 am
Github ha realizado un borrado; supongo que el contenido era ilegal o violaba alguna de sus políticas.

No creo que en un procedimiento para reproducir un exploit del S.O con el que obtener privilegios de Administrador haya nada ilegal, ni en contra de las políticas de uso de GitHub (ni de Microsoft), al menos siempre que se formalice como contenido con fines educativos.

Yo diría que el borrado lo hizo el propio autor, el tal EvilGreys. Es muy raro. Viendo las copías en la Wayback Machine de Archive.org, el repositorio estuvo online pero vacío por al menos un día entero, sin embargo, cuando GitHub borra un repositorio no deja el repositorio vacío por un tiempo y luego al cabo de 20 días lo borra...

me llevo la web https://injectexp.dev/ que parece bastante interesante.

En la copia de la Wayback Machine se puede ver claramente que esa web, injectexp.dev, se promociona por el tal EvilGreys en la descripción de su repositorio borrado.

Aparte, he estado buscando forks del repositorio (no hay ninguno), y me encontré con otro repositorio de una persona que publicó un comentario donde acusa a injectexp.dev de scammer, y comparte una presunta prueba en forma de un enlace a un canal de Telegram:

 - https://github.com/orgs/community/discussions/59642

No he investigado nada más, todo esto ha sido en unos diez minutos, peo yo concluyo que EvilGreys es el propietario del dominio injectexp.dev (tiene una cuenta en Twitter también, donde por cierto ignoró la petición de un usuario, y eso tampco genera confianza), y borró el repositorio de forma intencionada, y también su cuenta de usuario en GitHub (https://github.com/EvilGreys), quizás sin tener buenas intenciones para ello (para eliminar rastro de su actividad en Internet, o algo así).

¿Qué quiero decir con todo esto?. Bueno, que como mínimo no entreguen su confianza de forma ciega a los servicios de pago que se ofrecen en ese sitio web, i confíen tampoco demasiado en lo que se comaprta en su canal privado de Telegram, por que el tal EvilGreys / @DevSecAS y sus acciones son bastante sospechosas.

Aténtamente,
Elektro.
35  Programación / Scripting / Re: [APORTE] [PowerShell] RAR.exe | Multi-Compression Test Tool (Para Directorios) en: 20 Marzo 2024, 09:34 am
me acabas de dar una Idea con este script, un Ransomware que comprima los archivos con contraseña  >:D , una contraseña generada especialmente para cada directorio basado en su ruta y algun otro identificador, osea que si cambia de ruta el comprimido , F.



Que malvado, je! ;D
36  Programación / Scripting / Re: [APORTE] [PowerShell] RAR.exe | Multi-Compression Test Tool (Para Directorios) en: 19 Marzo 2024, 09:24 am
Quería hacerte variaspreguntas:

Agradezco tus sugerencias, pero este aporte no se debe considerar un proyecto abierto a solicitudes de cambios. Ni siquiera se debe considerar un proyecto. (En GitHub si tengo proyectos, todos ellos abiertos a solicitudes, abajo en mi firma de usuario hay enlace a mi perfil de GitHub.)

El script está hecho a medida para cumplir con mis necesidades personales. Simplemente lo comparto en el foro para que le pueda servir a otras personas que puedan encontrarse en situaciones con cierta similtud, para que puedan adaptar el código a sus necesidades, mediante sus conocimientos de programación.

Dado el caso siempre puedo considerar implementar alguna sugerencia muy puntual que no implicase realizar muchos cambios al comportamiento del código, y que sirviese para un propósito generalizado, pero no voy a adaptar el código a las necesidades específicas de otras personas para acabar fabricando un nuevo script prácticamente desde cero, por el tiempo que ello conlleva.



creo un rar con WinRar y un 7zup y un zip con 7zip. Luego escojo el que menos ocupa.

La eficacia de compresión de 7zip es superior a la de WinRAR, lo que supone que, al utilizar el mismo tamaño de diccionario y una configuración de máxima compresión, 7zip siempre debería obtener mayor tasa de compresión que WinRAR, aunque fuesen solo un par de bytes de diferencia al comprimir formatos de archivos que ya estén muy comprimidos.

poder elegir si quiero un archivo individual, una carpeta solo, o varios archivos o varias carpetas o varios archivos y carpetas

El comportamiento de un script puede ser configurado mediante la implementación de parámetros a través de la línea de comandos. Pero este script trabaja con una configuración hardcoded, es decir, con valores definidos directamente dentro del código fuente, en la sección "VARIABLES", por lo que para configurar el comportamiento del script hay que editar dichos valores.

Lo que propones implicaría demasiados cambios. Lo siento. El script procesa las carpetas de forma secuencial, todas las carpetas que haya en el directorio actual, sin opción a permitir seleccionar solamente "X" carpetas para la compresión.

Ese tipo de personalización sería más óptimo implementarlo en una interfaz gráfica de usuario (GUI), pero no en un script como este.

y esto que lo comprima en una carpeta (que aparezca en el archivo comprimido primero la carpeta), o sueltos (que cuando abra el archivo comprimido se vean ya los archivos y carpetas que contiene).

Ese comportamiento lo puedes alterar en el script simplemente borrando o añadiendo el parámetro "-ep1" de RAR.exe:

Citar
 -ep1           Exclude base directory from names

El parámetro está añadido por defecto en el script:

Citar
Código:
$arguments = @(
    " a -u -ams -c- -cfg- -dh -ep1 -htb -idcdn -isnd- -iver -m5 -ma5 -md$($size)m",
    ...



Si estás trabajando en un script de VBA y necesitas ayuda, para eso está el foro. Siéntete libre de mostrar tus avances y realizar dudas puntuales para seguir avanzado.

Aténtamente,
Elektro.
37  Programación / Scripting / Re: Archivo bat para borrar una entrada de registro en: 19 Marzo 2024, 08:17 am
eso ya me da más respeto, así es que lo voy a dejar así

Déjame decirte que por el simple hecho de ejecutar el batch-script que te mostré (tal y como está escrito, sin modificarlo) en mi último comentario con el programa setacl.exe que te indiqué, no va a pasar nada malo en tu PC. Esa advertencia en color rojo tengo que hacerla por pura formalidad más que por otra cosa...

Esa advertencia la tengo que poner por que en caso de que modifiques los permisos, de forma recursiva, de toda la rama "HKEY_LOCAL_MACHINE\SOFTWARE", pues, a ver, en principio no tiene por que ocurrir nada, pero siempre están los escenarios impredecibles con configuraciones específicas que acabasen provocando que ciertas aplicaciones instaladas para todos los usuarios dejasen de funcionar correctamente y, en caso de que modifiques los permisos, de forma recursiva, de toda la raíz "HKLM", pues, lo mismo, en principio no tiene por que ocurrir nada, pero siempre están los escenarios impredecibles con configuraciones específicas.

En fin. En caso de que no necesites automatizar esta tarea de borrar las claves del registro, simplemente considera utilizar el programa setacl.exe para obtener permisos de usuario sobre la clave de registro que te está dando error, y así lo solucionarás. También puedes usar 'SetACL Studio', pero te indiqué el otro programa por línea de comandos para que pudieras automatizar la tarea utilizado un script.

En cualquier caso, lo que prefieras hacer o no hacer es decisión tuya, claro está. Espero haberte podido ayudar en algo.

Hasta la próxima.
38  Foros Generales / Sugerencias y dudas sobre el Foro / Re: He publicado catorce hilos en el lugar incorrecto y de forma absurda... en: 19 Marzo 2024, 01:44 am
Gracias por la ayuda y la rapidez, todo poderoso Sayan. ;D

Un saludo a todos.
39  Programación / Scripting / Re: [APORTE] [PowerShell] RAR.exe | Multi-Compression Test Tool (Para Directorios) en: 19 Marzo 2024, 01:42 am
Comparto una versión actualizada del script. Las modificaciones se han basado en perfeccionar pequeños detalles y mejorar bastante la forma en que se compara el tamaño de los archivos ($toleranceSizeDiff).

Código
  1. <#
  2. ===========================================================================================
  3. |                                                                                         |
  4. |                                        Variables                                        |
  5. |                                                                                         |
  6. ===========================================================================================
  7. #>
  8.  
  9. $rarExecutablePath = "${env:ProgramFiles}\WinRAR\rar.exe"
  10. $dictionarySizesMb = @(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)
  11. $toleranceSizeDiff = 500kb
  12. $keepOnlySmallestRarFile  = $true
  13. $sendRarFilesToRecycleBin = $false
  14.  
  15. $compressedFileTypesArchive = @(
  16.    "7z" , "arc", "bz2" , "bzip", "bzip2",
  17.    "gz" , "gz2", "gza" , "gzi" , "gzip" ,
  18.    "lha", "lz" , "lz4" , "lzh" , "lzma" ,
  19.    "rar", "sfx", "tgz" , "tlz" , "tlzma",
  20.    "uha", "zip", "zipx", "zpaq"
  21. )
  22.  
  23. $compressedFileTypesAudio = @(
  24.    "aac", "ac3", "fla","flac",
  25.    "m4a", "mp3", "ogg", "ogm",
  26.    "usm", "wma"
  27. )
  28.  
  29. $compressedFileTypesVideo = @(
  30.    "asf", "avc", "avi" , "bik" , "bk2" , "f4v" , "flv" ,
  31.    "m1v", "m2t", "m2ts", "m2v" , "m4v" , "mpv4",
  32.    "mkv", "mov", "mp4" , "mpeg", "mpg" , "mts" ,
  33.    "qt" , "ts" , "vob" , "vp6" , "webm", "wmv"
  34. )
  35.  
  36. $compressedFileTypesOther = @(
  37.    "avif", "jpeg", "jpg" , "gif" , "pdf",
  38.    "pam" , "paq6", "paq7", "paq8",
  39.    "par" , "par2", "wad"
  40. )
  41.  
  42.  
  43. [string]$fileTypesToKeepUncompressed = (
  44.    $compressedFileTypesArchive +
  45.    $compressedFileTypesAudio +
  46.    $compressedFileTypesVideo +
  47.    $compressedFileTypesOther
  48. ) -join ';'
  49.  
  50. <#
  51. ===========================================================================================
  52. |                                                                                         |
  53. |                    rar.exe commands (only those used in this script)                    |
  54. |                                                                                         |
  55. ===========================================================================================
  56.  
  57. <Commands>
  58.  a             Add files to archive
  59.  
  60. <Switches>
  61.  -am[s,r]       Archive name and time [save, restore]
  62.  -c-            Disable comments show
  63.  -cfg-          Ignore configuration file and RAR environment variable.
  64.  -dh            Open shared files
  65.  -ep1           Exclude base directory from names
  66.  -ht[b|c]       Select hash type [BLAKE2,CRC32] for file checksum
  67.  -id[c,d,n,p,q] Display or disable messages
  68.  -ilog[name]    Log errors to file
  69.  -isnd[-]       Control notification sounds
  70.  -m<0..5>       Set compression level (0-store...3-default...5-maximal)
  71.  -ma[4|5]       Specify a version of archiving format
  72.  -md<n>[k,m,g]  Dictionary size in KB, MB or GB
  73.  -ms[list]      Specify file types to store.
  74.  -o[+|-]        Set the overwrite mode
  75.  -oc            Set NTFS Compressed attribute.
  76.  -oh            Save hard links as the link instead of the file
  77.  -oi[0-4][:min] Save identical files as references
  78.  -ol[a]         Process symbolic links as the link [absolute paths]
  79.  -oni           Allow potentially incompatible names
  80.  -qo[-|+]       Add quick open information [none|force]
  81.  -r             Recurse subdirectories
  82.  -ri<P>[:<S>]   Set priority (0-default,1-min..15-max) and sleep time in ms
  83.  -s-            Disable solid archiving
  84.  -t             Test files after archiving
  85.  -tk            Keep original archive time
  86.  -tl            Set archive time to newest file
  87.  -ts[m,c,a,p]   Save or restore time (modification, creation, access, preserve)
  88.  -u             Update files
  89.  -w<path>       Assign work directory
  90. #>
  91.  
  92. <#
  93. ===========================================================================================
  94. |                                                                                         |
  95. |                                        .NET Code                                        |
  96. |                                                                                         |
  97. ===========================================================================================
  98. #>
  99.  
  100. Add-Type -TypeDefinition @"
  101. using System;
  102. using System.Runtime.InteropServices;
  103.  
  104. public class Win32Functions {
  105.    [DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
  106.    public static extern long StrFormatByteSizeW(long fileSize, System.Text.StringBuilder buffer, int bufferSize);
  107. }
  108. "@
  109.  
  110. <#
  111. ===========================================================================================
  112. |                                                                                         |
  113. |                                    Functions                                            |
  114. |                                                                                         |
  115. ===========================================================================================
  116. #>
  117. function Format-FileSize {
  118.    param(
  119.        [long]$fileSize
  120.    )
  121.    $buffer = New-Object System.Text.StringBuilder 260
  122.    [Win32Functions]::StrFormatByteSizeW($fileSize, $buffer, $buffer.Capacity) | Out-Null
  123.    return $buffer.ToString()
  124. }
  125.  
  126. function Show-WelcomeScreen {
  127.    Clear-Host
  128.    Write-Host ""
  129.    Write-Host " $($host.ui.RawUI.WindowTitle)"
  130.    Write-Host " +==========================================================+"
  131.    Write-Host " |                                                          |"
  132.    Write-Host " | This script will use RAR.exe to compress each directory  |"
  133.    Write-Host " | in the current working directory individually, each      |"
  134.    Write-Host " | using different dictionary sizes, with max. compression, |"
  135.    Write-Host " | generating this way multiple RAR files for evaluating    |"
  136.    Write-Host " | compression rates on these dictionary sizes.             |"
  137.    Write-Host " |                                                          |"
  138.    Write-Host " +==========================================================+"
  139.    Write-Host ""
  140.    Write-Host " Script Settings            " -ForegroundColor DarkGray
  141.    Write-Host " ===========================" -ForegroundColor DarkGray
  142.    Write-Host " RAR Executable Path: $([System.IO.Path]::GetFullPath($rarExecutablePath))" -ForegroundColor Gray
  143.    Write-Host "" -ForegroundColor DarkGray
  144.    Write-Host " Dictionary Sizes (Megabyte): $($dictionarySizesMb -join ', ')" -ForegroundColor Gray
  145.    Write-Host " The script will create a RAR archive for each specified dictionary size." -ForegroundColor DarkGray
  146.    Write-Host "" -ForegroundColor DarkGray
  147.    Write-Host " File Types To Keep Uncompressed: `$keepCompressedFileTypesUncompressed" -ForegroundColor Gray
  148.    Write-Host " The script will instruct RAR to don't compress the specified known compressed file types." -ForegroundColor DarkGray
  149.    Write-Host " (See `$keepCompressedFileTypesUncompressed variable definition to manage the file types)" -ForegroundColor DarkGray
  150.    Write-Host "" -ForegroundColor DarkGray
  151.    Write-Host " Tolerance File Size Difference: $(Format-FileSize -fileSize $toleranceSizeDiff)" -ForegroundColor Gray
  152.    Write-Host " Any newly created RAR file whose file size compared to previously   " -ForegroundColor DarkGray
  153.    Write-Host " created RAR files is within the specified tolerance value, it will be deleted." -ForegroundColor DarkGray
  154.    Write-Host " For example, if `$toleranceSizeDiff value is 1MB:" -ForegroundColor DarkGray
  155.    Write-Host " If a created RAR file of 32 MB dict. size has a file size of 100 MB," -ForegroundColor DarkGray
  156.    Write-Host " and then a newly created RAR file of 64 MB dict. size has a file size of 99 MB, " -ForegroundColor DarkGray
  157.    Write-Host " the RAR file of 64 MB dict. size will be deleted because it only differs in 1MB or less." -ForegroundColor DarkGray
  158.    Write-Host "" -ForegroundColor DarkGray
  159.    Write-Host " Keep only smallest RAR file: $keepOnlySmallestRarFile" -ForegroundColor Gray
  160.    Write-Host " If True, the script will delete any newly created RAR file " -ForegroundColor DarkGray
  161.    Write-Host " whose file size is bigger than previously created RAR files." -ForegroundColor DarkGray
  162.    Write-Host " Note: it takes into account the specified `$toleranceSizeDiff value." -ForegroundColor DarkGray
  163.    Write-Host "" -ForegroundColor DarkGray
  164.    Write-Host " Send RAR files to recycle bin: $sendRarFilesToRecycleBin" -ForegroundColor Gray
  165.    Write-Host " If True, the script will send RAR files to recycle bin instead of permanently deleting them." -ForegroundColor DarkGray
  166.    Write-Host ""
  167. }
  168.  
  169. function Confirm-Continue {
  170.    Write-Host " Press 'Y' key to continue or 'N' to exit."
  171.    Write-Host ""
  172.    Write-Host " -Continue? (Y/N)"
  173.    do {
  174.        $key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
  175.        $char = $key.Character.ToString().ToUpper()
  176.        if ($char -ne "Y" -and $char -ne "N") {
  177.            [console]::beep(1500, 500)
  178.        }
  179.    } while ($char -ne "Y" -and $char -ne "N")
  180.    if ($char -eq "N") {Exit(1)} else {Clear-Host}
  181. }
  182.  
  183. function Compress-Files {
  184.    Add-Type -AssemblyName Microsoft.VisualBasic
  185.  
  186.    $dictionarySizesMb = $dictionarySizesMb | Sort-Object
  187.  
  188.    # Partir y formatear la cadena de file types para acomodarlo a la linea de argumentos de rar.exe
  189.    if (-not [String]::IsNullOrEmpty($fileTypesToKeepUncompressed)) {
  190.        $fileTypeTokens = $fileTypesToKeepUncompressed -split ';'
  191.        $fileTypesArgumentLines = @()
  192.        for ($i = 0; $i -lt $fileTypeTokens.Count; $i += 20) {
  193.            $fileTypesArgumentLines += "-ms" + ($fileTypeTokens[$i..($i + 19)] -join ';') + [Environment]::NewLine
  194.        }
  195.        if ($fileTypesArgumentLines.Count -gt 0) {
  196.            $fileTypesArgumentLines[-1] = $fileTypesArgumentLines[-1] -replace [Environment]::NewLine, ''
  197.        }
  198.    } else {
  199.        $fileTypesArgumentLines = "-ms "
  200.    }
  201.  
  202.    foreach ($dir in Get-ChildItem -LiteralPath "$PSScriptRoot" -Directory) {
  203.  
  204.        $dirSizeBytes = (Get-ChildItem -LiteralPath "$($dir.FullName)" -Recurse | Measure-Object -Property Length -sum).Sum
  205.  
  206.        # Keeps track of created rar files by rar.exe
  207.        $createdRarFiles = New-Object System.Collections.Generic.List[System.IO.FileInfo]
  208.  
  209.        foreach ($size in $dictionarySizesMb) {
  210.  
  211.            if (($size -ne $dictionarySizesMb[0]) -and ($dirSizeBytes * 4) -le ($size * 1MB)) {
  212.                $formattedDirSize = Format-FileSize -fileSize $dirSizeBytes
  213.                Write-Host "Ignoring compression with too big dictionary size of $size mb for a $formattedDirSize directory: `"$($dir.FullName)`"..." -ForegroundColor Yellow
  214.                continue
  215.            }
  216.  
  217.            $outputRarFilePath   = "$($dir.FullName)_$($size)mb.rar"
  218.            $errorLogFilePath = "$($dir.FullName)_$($size)mb_error.log"
  219.  
  220.            $arguments = @(
  221.                " a -u -ams -c- -cfg- -dh -ep1 -htb -idcdn -isnd- -iver -m5 -ma5 -md$($size)m",
  222.                " -o+ -oc -oh -oi2 -ol -oni -qo+ -r -ri0:0 -s- -t -tk -tl -tsmca+",
  223.                " $fileTypesArgumentLines",
  224.                " -x`"*\$($MyInvocation.MyCommand.Name)`"",
  225.                " -w`"$($env:TEMP)`"",
  226.                " -ilog`"$errorLogFilePath`"",
  227.                " -- `"$outputRarFilePath`"",
  228.                " -- `"$($dir.FullName)\*`""
  229.            )
  230.  
  231.            Write-Host "Compressing directory with $size mb dictionary size: `"$($dir.Name)`"..."
  232.            #Write-Host ""
  233.            #Write-Host "rar.exe arguments:" -ForegroundColor DarkGray
  234.            #Write-Host ($arguments -join [Environment]::NewLine) -ForegroundColor DarkGray
  235.  
  236.            $previousForegroundColor = $host.UI.RawUI.ForegroundColor
  237.            $host.UI.RawUI.ForegroundColor = "DarkGray"
  238.            $psi = New-Object System.Diagnostics.ProcessStartInfo
  239.            $psi.FileName = $rarExecutablePath
  240.            $psi.Arguments = $arguments -join ' '
  241.            $psi.RedirectStandardOutput = $false
  242.            $psi.UseShellExecute = $false
  243.            $psi.CreateNoWindow = $false
  244.  
  245.            $process = [System.Diagnostics.Process]::Start($psi)
  246.            $process.WaitForExit()
  247.            $host.UI.RawUI.ForegroundColor = $previousForegroundColor
  248.  
  249.            $outputRarFile = New-Object System.IO.FileInfo($outputRarFilePath)
  250.            $formattedOutputRarFileSize = Format-FileSize -fileSize $outputRarFile.Length
  251.            Write-Host ""
  252.            Write-Host "Created rar with file name: $($outputRarFile.Name) ($formattedOutputRarFileSize) ($($outputRarFile.Length) bytes)" -ForegroundColor DarkGreen
  253.  
  254.            if ($toleranceSizeDiff -ne $null) {
  255.                if ($createdRarFiles.Count -ne 0) {
  256.                    $outputRarFileSize = $outputRarFile.Length
  257.                    $formattedOutputRarFileSize = Format-FileSize -fileSize $outputRarFileSize
  258.                    $formattedToleranceFileSize = Format-FileSize -fileSize $toleranceSizeDiff
  259.  
  260.                    foreach ($createdRarFile in $createdRarFiles) {
  261.                        if ($createdRarFile.Exists) {
  262.                            $createdRarFileSize = $createdRarFile.Length
  263.                            $formattedCreatedRarFileSize = Format-FileSize -fileSize $createdRarFileSize
  264.                            $diffSize = [Math]::Abs($createdRarFileSize - $outputRarFileSize)
  265.                            $formattedDiffSize = Format-FileSize -fileSize $diffSize
  266.  
  267.                            if (($outputRarFileSize + $toleranceSizeDiff) -ge $createdRarFileSize) {
  268.                                Write-Host ""
  269.                                Write-Host "Size of this created RAR file ($formattedOutputRarFileSize) ($outputRarFileSize bytes) is within the $formattedToleranceFileSize tolerance difference" -ForegroundColor Yellow
  270.                                Write-Host "than a previously created RAR file of $formattedCreatedRarFileSize ($createdRarFileSize bytes) with smaller dictionary size..." -ForegroundColor Yellow
  271.                                Write-Host "Size of this created RAR file only differs by $formattedDiffSize ($diffSize bytes)." -ForegroundColor Yellow
  272.                                Write-Host "Deleting file: `"$($outputRarFile.Name)`"..." -ForegroundColor Yellow
  273.                                if ($sendRarFilesToRecycleBin) {
  274.                                    [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($outputRarFile.FullName, 'OnlyErrorDialogs', 'SendToRecycleBin')
  275.                                } else {
  276.                                    [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($outputRarFile.FullName, 'OnlyErrorDialogs', 'DeletePermanently')
  277.                                }
  278.                                Write-Host "Deletion completed." -ForegroundColor Yellow
  279.                                break
  280.                            }
  281.                        }
  282.                    }
  283.                }
  284.            }
  285.  
  286.            if (Test-Path -LiteralPath $outputRarFile.FullName -PathType Leaf) {
  287.                $createdRarFiles.Add($outputRarFile)
  288.            }
  289.            Write-Host ""
  290.        }
  291.  
  292.        if ($keepOnlySmallestRarFile -and $createdRarFiles.Count -gt 0) {
  293.            $existingFiles = $createdRarFiles | Where-Object { $_.Exists }
  294.            if ($existingFiles.Count -gt 0) {
  295.                Write-Host "`$keepOnlySmallestRarFile variable is `$True. Comparing file sizes of created RAR files..." -ForegroundColor Yellow
  296.                Write-Host ""
  297.                $smallestFile = $existingFiles | Sort-Object Length | Select-Object -First 1
  298.                foreach ($file in $existingFiles) {
  299.                    if ($file -ne $smallestFile) {
  300.                        $formattedFileSize = Format-FileSize -fileSize $file.Length
  301.                        Write-Host "Deleting file: `"$($file.Name)`" ($formattedFileSize)..." -ForegroundColor Yellow
  302.                        if ($sendRarFilesToRecycleBin) {
  303.                            [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($file.FullName, 'OnlyErrorDialogs', 'SendToRecycleBin')
  304.                        } else {
  305.                            [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($file.FullName, 'OnlyErrorDialogs', 'DeletePermanently')
  306.                        }
  307.                        Write-Host "Deletion completed." -ForegroundColor Yellow
  308.                        Write-Host ""
  309.                    }
  310.                }
  311.                $formattedSmallestFileSize = Format-FileSize -fileSize $smallestFile.Length
  312.                Write-Host "Smallest file kept: $($smallestFile.Name) ($formattedSmallestFileSize)" -ForegroundColor Green
  313.                Write-Host ""
  314.            }
  315.        }
  316.  
  317.    }
  318. }
  319.  
  320. function Show-GoodbyeScreen {
  321.    Write-Host "Operation Completed!" -BackgroundColor Black -ForegroundColor Green
  322.    Write-Host ""
  323.    Write-Host "Press any key to exit..."
  324.    $key = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown")
  325.    Exit(0)
  326. }
  327.  
  328. <#
  329. ===========================================================================================
  330. |                                                                                         |
  331. |                                         Main                                            |
  332. |                                                                                         |
  333. ===========================================================================================
  334. #>
  335.  
  336. [System.Console]::Title = "RAR Multi-Compression Test Tool (Directories) - by Elektro"
  337. #[System.Console]::SetWindowSize(150, 45)
  338. [CultureInfo]::CurrentUICulture = "en-US"
  339.  
  340. try { Set-ExecutionPolicy -ExecutionPolicy "Unrestricted" -Scope "Process" } catch { }
  341.  
  342. Show-WelcomeScreen
  343. Confirm-Continue
  344. Compress-Files
  345. Show-GoodbyeScreen
  346.  
40  Programación / Scripting / Re: [APORTE] [PowerShell] RAR.exe | Multi-Compression Test Tool (Para Archivos) en: 19 Marzo 2024, 01:42 am
Comparto una versión actualizada del script. Las modificaciones se han basado en perfeccionar pequeños detalles y mejorar bastante la forma en que se compara el tamaño de los archivos ($toleranceSizeDiff).

Código
  1. <#
  2. ===========================================================================================
  3. |                                                                                         |
  4. |                                        Variables                                        |
  5. |                                                                                         |
  6. ===========================================================================================
  7. #>
  8.  
  9. $rarExecutablePath = "${env:ProgramFiles}\WinRAR\rar.exe"
  10. $dictionarySizesMb = @(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)
  11. $toleranceSizeDiff = 100kb
  12. $keepOnlySmallestRarFile  = $true
  13. $sendRarFilesToRecycleBin = $false
  14.  
  15. $compressedFileTypesArchive = @(
  16.    "7z" , "arc", "bz2" , "bzip", "bzip2",
  17.    "gz" , "gz2", "gza" , "gzi" , "gzip" ,
  18.    "lha", "lz" , "lz4" , "lzh" , "lzma" ,
  19.    "rar", "sfx", "tgz" , "tlz" , "tlzma",
  20.    "uha", "zip", "zipx", "zpaq"
  21. )
  22.  
  23. $compressedFileTypesAudio = @(
  24.    "aac", "ac3", "fla","flac",
  25.    "m4a", "mp3", "ogg", "ogm",
  26.    "usm", "wma"
  27. )
  28.  
  29. $compressedFileTypesVideo = @(
  30.    "asf", "avc", "avi" , "bik" , "bk2" , "f4v" , "flv" ,
  31.    "m1v", "m2t", "m2ts", "m2v" , "m4v" , "mpv4",
  32.    "mkv", "mov", "mp4" , "mpeg", "mpg" , "mts" ,
  33.    "qt" , "ts" , "vob" , "vp6" , "webm", "wmv"
  34. )
  35.  
  36. $compressedFileTypesOther = @(
  37.    "avif", "jpeg", "jpg" , "gif" , "pdf",
  38.    "pam" , "paq6", "paq7", "paq8",
  39.    "par" , "par2", "wad"
  40. )
  41.  
  42.  
  43. [string]$fileTypesToKeepUncompressed = (
  44.    $compressedFileTypesArchive +
  45.    $compressedFileTypesAudio +
  46.    $compressedFileTypesVideo +
  47.    $compressedFileTypesOther
  48. ) -join ';'
  49.  
  50. <#
  51. ===========================================================================================
  52. |                                                                                         |
  53. |                    rar.exe commands (only those used in this script)                    |
  54. |                                                                                         |
  55. ===========================================================================================
  56.  
  57. <Commands>
  58.  a             Add files to archive
  59.  
  60. <Switches>
  61.  -am[s,r]       Archive name and time [save, restore]
  62.  -c-            Disable comments show
  63.  -cfg-          Ignore configuration file and RAR environment variable.
  64.  -dh            Open shared files
  65.  -ep1           Exclude base directory from names
  66.  -ht[b|c]       Select hash type [BLAKE2,CRC32] for file checksum
  67.  -id[c,d,n,p,q] Display or disable messages
  68.  -ilog[name]    Log errors to file
  69.  -isnd[-]       Control notification sounds
  70.  -m<0..5>       Set compression level (0-store...3-default...5-maximal)
  71.  -ma[4|5]       Specify a version of archiving format
  72.  -md<n>[k,m,g]  Dictionary size in KB, MB or GB
  73.  -ms[list]      Specify file types to store.
  74.  -o[+|-]        Set the overwrite mode
  75.  -oc            Set NTFS Compressed attribute.
  76.  -oh            Save hard links as the link instead of the file
  77.  -oi[0-4][:min] Save identical files as references
  78.  -ol[a]         Process symbolic links as the link [absolute paths]
  79.  -oni           Allow potentially incompatible names
  80.  -qo[-|+]       Add quick open information [none|force]
  81.  -r             Recurse subdirectories
  82.  -ri<P>[:<S>]   Set priority (0-default,1-min..15-max) and sleep time in ms
  83.  -s-            Disable solid archiving
  84.  -t             Test files after archiving
  85.  -tk            Keep original archive time
  86.  -tl            Set archive time to newest file
  87.  -ts[m,c,a,p]   Save or restore time (modification, creation, access, preserve)
  88.  -u             Update files
  89.  -w<path>       Assign work directory
  90. #>
  91.  
  92. <#
  93. ===========================================================================================
  94. |                                                                                         |
  95. |                                        .NET Code                                        |
  96. |                                                                                         |
  97. ===========================================================================================
  98. #>
  99.  
  100. Add-Type -TypeDefinition @"
  101. using System;
  102. using System.Runtime.InteropServices;
  103.  
  104. public class Win32Functions {
  105.    [DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
  106.    public static extern long StrFormatByteSizeW(long fileSize, System.Text.StringBuilder buffer, int bufferSize);
  107. }
  108. "@
  109.  
  110. <#
  111. ===========================================================================================
  112. |                                                                                         |
  113. |                                    Functions                                            |
  114. |                                                                                         |
  115. ===========================================================================================
  116. #>
  117. function Format-FileSize {
  118.    param(
  119.        [long]$fileSize
  120.    )
  121.    $buffer = New-Object System.Text.StringBuilder 260
  122.    [Win32Functions]::StrFormatByteSizeW($fileSize, $buffer, $buffer.Capacity) | Out-Null
  123.    return $buffer.ToString()
  124. }
  125.  
  126. function Show-WelcomeScreen {
  127.    Clear-Host
  128.    Write-Host ""
  129.    Write-Host " $($host.ui.RawUI.WindowTitle)"
  130.    Write-Host " +========================================================+"
  131.    Write-Host " |                                                        |"
  132.    Write-Host " | This script will use RAR.exe to compress each file in  |"
  133.    Write-Host " | the current working directory individually, each using |"
  134.    Write-Host " | different dictionary sizes, with max. compression,     |"
  135.    Write-Host " | generating this way multiple RAR files for evaluating  |"
  136.    Write-Host " | compression rates on these dictionary sizes.           |"
  137.    Write-Host " |                                                        |"
  138.    Write-Host " +=========================================================+"
  139.    Write-Host ""
  140.    Write-Host " Script Settings            " -ForegroundColor DarkGray
  141.    Write-Host " ===========================" -ForegroundColor DarkGray
  142.    Write-Host " RAR Executable Path: $([System.IO.Path]::GetFullPath($rarExecutablePath))" -ForegroundColor Gray
  143.    Write-Host "" -ForegroundColor DarkGray
  144.    Write-Host " Dictionary Sizes (Megabyte): $($dictionarySizesMb -join ', ')" -ForegroundColor Gray
  145.    Write-Host " The script will create a RAR archive for each specified dictionary size." -ForegroundColor DarkGray
  146.    Write-Host "" -ForegroundColor DarkGray
  147.    Write-Host " File Types To Keep Uncompressed: `$keepCompressedFileTypesUncompressed" -ForegroundColor Gray
  148.    Write-Host " The script will instruct RAR to don't compress the specified known compressed file types." -ForegroundColor DarkGray
  149.    Write-Host " (See `$keepCompressedFileTypesUncompressed variable definition to manage the file types)" -ForegroundColor DarkGray
  150.    Write-Host "" -ForegroundColor DarkGray
  151.    Write-Host " Tolerance File Size Difference: $(Format-FileSize -fileSize $toleranceSizeDiff)" -ForegroundColor Gray
  152.    Write-Host " Any newly created RAR file whose file size compared to previously   " -ForegroundColor DarkGray
  153.    Write-Host " created RAR files is within the specified tolerance value, it will be deleted." -ForegroundColor DarkGray
  154.    Write-Host " For example, if `$toleranceSizeDiff value is 1MB:" -ForegroundColor DarkGray
  155.    Write-Host " If a created RAR file of 32 MB dict. size has a file size of 100 MB," -ForegroundColor DarkGray
  156.    Write-Host " and then a newly created RAR file of 64 MB dict. size has a file size of 99 MB, " -ForegroundColor DarkGray
  157.    Write-Host " the RAR file of 64 MB dict. size will be deleted because it only differs in 1MB or less." -ForegroundColor DarkGray
  158.    Write-Host "" -ForegroundColor DarkGray
  159.    Write-Host " Keep only smallest RAR file: $keepOnlySmallestRarFile" -ForegroundColor Gray
  160.    Write-Host " If True, the script will delete any newly created RAR file " -ForegroundColor DarkGray
  161.    Write-Host " whose file size is bigger than previously created RAR files." -ForegroundColor DarkGray
  162.    Write-Host " Note: it takes into account the specified `$toleranceSizeDiff value." -ForegroundColor DarkGray
  163.    Write-Host "" -ForegroundColor DarkGray
  164.    Write-Host " Send RAR files to recycle bin: $sendRarFilesToRecycleBin" -ForegroundColor Gray
  165.    Write-Host " If True, the script will send RAR files to recycle bin instead of permanently deleting them." -ForegroundColor DarkGray
  166.    Write-Host ""
  167. }
  168.  
  169. function Confirm-Continue {
  170.    Write-Host " Press 'Y' key to continue or 'N' to exit."
  171.    Write-Host ""
  172.    Write-Host " -Continue? (Y/N)"
  173.    do {
  174.        $key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
  175.        $char = $key.Character.ToString().ToUpper()
  176.        if ($char -ne "Y" -and $char -ne "N") {
  177.            [console]::beep(1500, 500)
  178.        }
  179.    } while ($char -ne "Y" -and $char -ne "N")
  180.    if ($char -eq "N") {Exit(1)} else {Clear-Host}
  181. }
  182.  
  183. function Compress-Files {
  184.    Add-Type -AssemblyName Microsoft.VisualBasic
  185.  
  186.    $dictionarySizesMb = $dictionarySizesMb | Sort-Object
  187.  
  188.    # Partir y formatear la cadena de file types para acomodarlo a la linea de argumentos de rar.exe
  189.    if (-not [String]::IsNullOrEmpty($fileTypesToKeepUncompressed)) {
  190.        $fileTypeTokens = $fileTypesToKeepUncompressed -split ';'
  191.        $fileTypesArgumentLines = @()
  192.        for ($i = 0; $i -lt $fileTypeTokens.Count; $i += 20) {
  193.            $fileTypesArgumentLines += "-ms" + ($fileTypeTokens[$i..($i + 19)] -join ';') + [Environment]::NewLine
  194.        }
  195.        if ($fileTypesArgumentLines.Count -gt 0) {
  196.            $fileTypesArgumentLines[-1] = $fileTypesArgumentLines[-1] -replace [Environment]::NewLine, ''
  197.        }
  198.    } else {
  199.        $fileTypesArgumentLines = "-ms "
  200.    }
  201.  
  202.    foreach ($inputFile in Get-ChildItem -LiteralPath "$PSScriptRoot" -File) {
  203.  
  204.        if ($inputFile.Name -eq [System.IO.Path]::GetFileName($PSCommandPath)) {
  205.            continue
  206.        }
  207.  
  208.        # Keeps track of created rar files by rar.exe
  209.        $createdRarFiles = New-Object System.Collections.Generic.List[System.IO.FileInfo]
  210.  
  211.        foreach ($size in $dictionarySizesMb) {
  212.  
  213.            if (($size -ne $dictionarySizesMb[0]) -and ($inputFile.Length * 4) -le ($size * 1MB)) {
  214.                $formattedSize = Format-FileSize -fileSize $inputFile.Length
  215.                Write-Host "Ignoring compression with too big dictionary size of $size mb for a $formattedSize file: `"$($inputFile.Name)`"..." -ForegroundColor Yellow
  216.                continue
  217.            }
  218.  
  219.            $outputRarFilePath   = "$($inputFile.FullName)_$($size)mb.rar"
  220.            $errorLogFilePath = "$($inputFile.FullName)_$($size)mb_error.log"
  221.  
  222.            $arguments = @(
  223.                " a -u -ams -c- -cfg- -dh -ep1 -htb -idcdn -isnd- -iver -m5 -ma5 -md$($size)m",
  224.                " -o+ -oc -oh -oi2 -ol -oni -qo+ -r -ri0:0 -s- -t -tk -tl -tsmca+",
  225.                " $fileTypesArgumentLines",
  226.                " -x`"*\$($MyInvocation.MyCommand.Name)`"",
  227.                " -w`"$($env:TEMP)`"",
  228.                " -ilog`"$errorLogFilePath`"",
  229.                " -- `"$outputRarFilePath`"",
  230.                " -- `"$($inputFile.FullName)`""
  231.            )
  232.  
  233.            Write-Host "Compressing file with $size mb dictionary size: `"$($inputFile.Name)`"..."
  234.            #Write-Host ""
  235.            #Write-Host "rar.exe arguments:" -ForegroundColor DarkGray
  236.            #Write-Host ($arguments -join [Environment]::NewLine) -ForegroundColor DarkGray
  237.  
  238.            $previousForegroundColor = $host.UI.RawUI.ForegroundColor
  239.            $host.UI.RawUI.ForegroundColor = "DarkGray"
  240.            $psi = New-Object System.Diagnostics.ProcessStartInfo
  241.            $psi.FileName = $rarExecutablePath
  242.            $psi.Arguments = $arguments -join ' '
  243.            $psi.RedirectStandardOutput = $false
  244.            $psi.UseShellExecute = $false
  245.            $psi.CreateNoWindow = $false
  246.  
  247.            $process = [System.Diagnostics.Process]::Start($psi)
  248.            $process.WaitForExit()
  249.            $host.UI.RawUI.ForegroundColor = $previousForegroundColor
  250.  
  251.            $outputRarFile = New-Object System.IO.FileInfo($outputRarFilePath)
  252.            $formattedOutputRarFileSize = Format-FileSize -fileSize $outputRarFile.Length
  253.            Write-Host ""
  254.            Write-Host "Created rar with file name: $($outputRarFile.Name) ($formattedOutputRarFileSize) ($($outputRarFile.Length) bytes)" -ForegroundColor DarkGreen
  255.  
  256.            if ($toleranceSizeDiff -ne $null) {
  257.                if ($createdRarFiles.Count -ne 0) {
  258.                    $outputRarFileSize = $outputRarFile.Length
  259.                    $formattedOutputRarFileSize = Format-FileSize -fileSize $outputRarFileSize
  260.                    $formattedToleranceFileSize = Format-FileSize -fileSize $toleranceSizeDiff
  261.  
  262.                    foreach ($createdRarFile in $createdRarFiles) {
  263.                        if ($createdRarFile.Exists) {
  264.                            $createdRarFileSize = $createdRarFile.Length
  265.                            $formattedCreatedRarFileSize = Format-FileSize -fileSize $createdRarFileSize
  266.                            $diffSize = [Math]::Abs($createdRarFileSize - $outputRarFileSize)
  267.                            $formattedDiffSize = Format-FileSize -fileSize $diffSize
  268.  
  269.                            if (($outputRarFileSize + $toleranceSizeDiff) -ge $createdRarFileSize) {
  270.                                Write-Host ""
  271.                                Write-Host "Size of this created RAR file ($formattedOutputRarFileSize) ($outputRarFileSize bytes) is within the $formattedToleranceFileSize tolerance difference" -ForegroundColor Yellow
  272.                                Write-Host "than a previously created RAR file of $formattedCreatedRarFileSize ($createdRarFileSize bytes) with smaller dictionary size..." -ForegroundColor Yellow
  273.                                Write-Host "Size of this created RAR file only differs by $formattedDiffSize ($diffSize bytes)." -ForegroundColor Yellow
  274.                                Write-Host "Deleting file: `"$($outputRarFile.Name)`"..." -ForegroundColor Yellow
  275.                                if ($sendRarFilesToRecycleBin) {
  276.                                    [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($outputRarFile.FullName, 'OnlyErrorDialogs', 'SendToRecycleBin')
  277.                                } else {
  278.                                    [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($outputRarFile.FullName, 'OnlyErrorDialogs', 'DeletePermanently')
  279.                                }
  280.                                Write-Host "Deletion completed." -ForegroundColor Yellow
  281.                                break
  282.                            }
  283.                        }
  284.                    }
  285.                }
  286.            }
  287.  
  288.            if (Test-Path -LiteralPath $outputRarFile.FullName -PathType Leaf) {
  289.                $createdRarFiles.Add($outputRarFile)
  290.            }
  291.            Write-Host ""
  292.        }
  293.  
  294.        if ($keepOnlySmallestRarFile -and $createdRarFiles.Count -gt 0) {
  295.            $existingFiles = $createdRarFiles | Where-Object { $_.Exists }
  296.            if ($existingFiles.Count -gt 0) {
  297.                Write-Host "`$keepOnlySmallestRarFile variable is `$True. Comparing file sizes of created RAR files..." -ForegroundColor Yellow
  298.                Write-Host ""
  299.                $smallestFile = $existingFiles | Sort-Object Length | Select-Object -First 1
  300.                foreach ($file in $existingFiles) {
  301.                    if ($file -ne $smallestFile) {
  302.                        $formattedFileSize = Format-FileSize -fileSize $file.Length
  303.                        Write-Host "Deleting file: `"$($file.Name)`" ($formattedFileSize)..." -ForegroundColor Yellow
  304.                        if ($sendRarFilesToRecycleBin) {
  305.                            [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($file.FullName, 'OnlyErrorDialogs', 'SendToRecycleBin')
  306.                        } else {
  307.                            [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($file.FullName, 'OnlyErrorDialogs', 'DeletePermanently')
  308.                        }
  309.                        Write-Host "Deletion completed." -ForegroundColor Yellow
  310.                        Write-Host ""
  311.                    }
  312.                }
  313.                $formattedSmallestFileSize = Format-FileSize -fileSize $smallestFile.Length
  314.                Write-Host "Smallest file kept: $($smallestFile.Name) ($formattedSmallestFileSize)" -ForegroundColor Green
  315.                Write-Host ""
  316.            }
  317.        }
  318.  
  319.    }
  320. }
  321.  
  322. function Show-GoodbyeScreen {
  323.    Write-Host "Operation Completed!" -BackgroundColor Black -ForegroundColor Green
  324.    Write-Host ""
  325.    Write-Host "Press any key to exit..."
  326.    $key = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown")
  327.    Exit(0)
  328. }
  329.  
  330. <#
  331. ===========================================================================================
  332. |                                                                                         |
  333. |                                         Main                                            |
  334. |                                                                                         |
  335. ===========================================================================================
  336. #>
  337.  
  338. [System.Console]::Title = "RAR Multi-Compression Test Tool (Files) - by Elektro"
  339. #[System.Console]::SetWindowSize(150, 45)
  340. [CultureInfo]::CurrentUICulture = "en-US"
  341.  
  342. try { Set-ExecutionPolicy -ExecutionPolicy "Unrestricted" -Scope "Process" } catch { }
  343.  
  344. Show-WelcomeScreen
  345. Confirm-Continue
  346. Compress-Files
  347. Show-GoodbyeScreen
  348.  
Páginas: 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ... 1235
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines