|
Páginas: [ 1] 2 3 4 5 6 7 8 9 10
1
en: Hoy a las 07:13
|
Iniciado por zelarra - Último mensaje por zelarra
|
Hola, Pues mira, te agradezco el último aporte, pero eso ya me da más respeto, así es que lo voy a dejar así. Muchas gracias.
|
2
en: Hoy a las 07:06
|
Iniciado por Eleкtro - Último mensaje por zelarra
|
Hola. He visto tu entrada y me ha interesado el tema porque yo estaba pensando en hacer algo similar pero con VBA.
Quería hacerte variaspreguntas:
1. Cuando comprimo un archivo o carpeta, creo un rar con WinRar y un 7zup y un zip con 7zip. Luego escojo el que menos ocupa. ¿Se podría añadir esta opción?
2. No busco tanto que me genere un archivo comprimido por cada archivo / carpeta dentro de la carpeta, sino poder elegir si quiero un archivo individual, una carpeta solo, o varios archivos o varias carpetas o varios archivos y carpetas, 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). ¿Se podría considerar esta opción?
Si hace falta capturas que complementen mis preguntas, al mediodía las comparto.
Saludos y gracias por el aporte.
|
3
en: Hoy a las 01:44
|
Iniciado por Eleкtro - Último mensaje por Eleкtro
|
Gracias por la ayuda y la rapidez, todo poderoso Sayan. Un saludo a todos.
|
4
en: Hoy a las 01:42
|
Iniciado por Eleкtro - Último mensaje por Eleкtro
|
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). <# =========================================================================================== | | | Variables | | | =========================================================================================== #> $rarExecutablePath = "${env:ProgramFiles}\WinRAR\rar.exe" $dictionarySizesMb = @(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048) $toleranceSizeDiff = 500kb $keepOnlySmallestRarFile = $true $sendRarFilesToRecycleBin = $false $compressedFileTypesArchive = @( "7z" , "arc", "bz2" , "bzip", "bzip2", "gz" , "gz2", "gza" , "gzi" , "gzip" , "lha", "lz" , "lz4" , "lzh" , "lzma" , "rar", "sfx", "tgz" , "tlz" , "tlzma", "uha", "zip", "zipx", "zpaq" ) $compressedFileTypesAudio = @( "aac", "ac3", "fla","flac", "m4a", "mp3", "ogg", "ogm", "usm", "wma" ) $compressedFileTypesVideo = @( "asf", "avc", "avi" , "bik" , "bk2" , "f4v" , "flv" , "m1v", "m2t", "m2ts", "m2v" , "m4v" , "mpv4", "mkv", "mov", "mp4" , "mpeg", "mpg" , "mts" , "qt" , "ts" , "vob" , "vp6" , "webm", "wmv" ) $compressedFileTypesOther = @( "avif", "jpeg", "jpg" , "gif" , "pdf", "pam" , "paq6", "paq7", "paq8", "par" , "par2", "wad" ) [string]$fileTypesToKeepUncompressed = ( $compressedFileTypesArchive + $compressedFileTypesAudio + $compressedFileTypesVideo + $compressedFileTypesOther ) -join ';' <# =========================================================================================== | | | rar.exe commands (only those used in this script) | | | =========================================================================================== <Commands> a Add files to archive <Switches> -am[s,r] Archive name and time [save, restore] -c- Disable comments show -cfg- Ignore configuration file and RAR environment variable. -dh Open shared files -ep1 Exclude base directory from names -ht[b|c] Select hash type [BLAKE2,CRC32] for file checksum -id[c,d,n,p,q] Display or disable messages -ilog[name] Log errors to file -isnd[-] Control notification sounds -m<0..5> Set compression level (0-store...3-default...5-maximal) -ma[4|5] Specify a version of archiving format -md<n>[k,m,g] Dictionary size in KB, MB or GB -ms[list] Specify file types to store. -o[+|-] Set the overwrite mode -oc Set NTFS Compressed attribute. -oh Save hard links as the link instead of the file -oi[0-4][:min] Save identical files as references -ol[a] Process symbolic links as the link [absolute paths] -oni Allow potentially incompatible names -qo[-|+] Add quick open information [none|force] -r Recurse subdirectories -ri<P>[:<S>] Set priority (0-default,1-min..15-max) and sleep time in ms -s- Disable solid archiving -t Test files after archiving -tk Keep original archive time -tl Set archive time to newest file -ts[m,c,a,p] Save or restore time (modification, creation, access, preserve) -u Update files -w<path> Assign work directory #> <# =========================================================================================== | | | .NET Code | | | =========================================================================================== #> Add-Type -TypeDefinition @" using System; using System.Runtime.InteropServices; public class Win32Functions { [DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)] public static extern long StrFormatByteSizeW(long fileSize, System.Text.StringBuilder buffer, int bufferSize); } "@ <# =========================================================================================== | | | Functions | | | =========================================================================================== #> function Format-FileSize { param( [long]$fileSize ) $buffer = New-Object System.Text.StringBuilder 260 [Win32Functions]::StrFormatByteSizeW($fileSize, $buffer, $buffer.Capacity) | Out-Null return $buffer.ToString() } function Show-WelcomeScreen { Clear-Host Write-Host "" Write-Host " $($host.ui.RawUI.WindowTitle)" Write-Host " +==========================================================+" Write-Host " | |" Write-Host " | This script will use RAR.exe to compress each directory |" Write-Host " | in the current working directory individually, each |" Write-Host " | using different dictionary sizes, with max. compression, |" Write-Host " | generating this way multiple RAR files for evaluating |" Write-Host " | compression rates on these dictionary sizes. |" Write-Host " | |" Write-Host " +==========================================================+" Write-Host "" Write-Host " Script Settings " -ForegroundColor DarkGray Write-Host " ===========================" -ForegroundColor DarkGray Write-Host " RAR Executable Path: $([System.IO.Path]::GetFullPath($rarExecutablePath))" -ForegroundColor Gray Write-Host "" -ForegroundColor DarkGray Write-Host " Dictionary Sizes (Megabyte): $($dictionarySizesMb -join ', ')" -ForegroundColor Gray Write-Host " The script will create a RAR archive for each specified dictionary size." -ForegroundColor DarkGray Write-Host "" -ForegroundColor DarkGray Write-Host " File Types To Keep Uncompressed: `$keepCompressedFileTypesUncompressed" -ForegroundColor Gray Write-Host " The script will instruct RAR to don't compress the specified known compressed file types." -ForegroundColor DarkGray Write-Host " (See `$keepCompressedFileTypesUncompressed variable definition to manage the file types)" -ForegroundColor DarkGray Write-Host "" -ForegroundColor DarkGray Write-Host " Tolerance File Size Difference: $(Format-FileSize -fileSize $toleranceSizeDiff)" -ForegroundColor Gray Write-Host " Any newly created RAR file whose file size compared to previously " -ForegroundColor DarkGray Write-Host " created RAR files is within the specified tolerance value, it will be deleted." -ForegroundColor DarkGray Write-Host " For example, if `$toleranceSizeDiff value is 1MB:" -ForegroundColor DarkGray Write-Host " If a created RAR file of 32 MB dict. size has a file size of 100 MB," -ForegroundColor DarkGray Write-Host " and then a newly created RAR file of 64 MB dict. size has a file size of 99 MB, " -ForegroundColor DarkGray Write-Host " the RAR file of 64 MB dict. size will be deleted because it only differs in 1MB or less." -ForegroundColor DarkGray Write-Host "" -ForegroundColor DarkGray Write-Host " Keep only smallest RAR file: $keepOnlySmallestRarFile" -ForegroundColor Gray Write-Host " If True, the script will delete any newly created RAR file " -ForegroundColor DarkGray Write-Host " whose file size is bigger than previously created RAR files." -ForegroundColor DarkGray Write-Host " Note: it takes into account the specified `$toleranceSizeDiff value." -ForegroundColor DarkGray Write-Host "" -ForegroundColor DarkGray Write-Host " Send RAR files to recycle bin: $sendRarFilesToRecycleBin" -ForegroundColor Gray Write-Host " If True, the script will send RAR files to recycle bin instead of permanently deleting them." -ForegroundColor DarkGray Write-Host "" } function Confirm-Continue { Write-Host " Press 'Y' key to continue or 'N' to exit." Write-Host "" Write-Host " -Continue? (Y/N)" do { $key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") $char = $key.Character.ToString().ToUpper() if ($char -ne "Y" -and $char -ne "N") { [console]::beep(1500, 500) } } while ($char -ne "Y" -and $char -ne "N") if ($char -eq "N") {Exit(1)} else {Clear-Host} } function Compress-Files { Add-Type -AssemblyName Microsoft.VisualBasic $dictionarySizesMb = $dictionarySizesMb | Sort-Object # Partir y formatear la cadena de file types para acomodarlo a la linea de argumentos de rar.exe if (-not [String]::IsNullOrEmpty($fileTypesToKeepUncompressed)) { $fileTypeTokens = $fileTypesToKeepUncompressed -split ';' $fileTypesArgumentLines = @() for ($i = 0; $i -lt $fileTypeTokens.Count; $i += 20) { $fileTypesArgumentLines += "-ms" + ($fileTypeTokens[$i..($i + 19)] -join ';') + [Environment]::NewLine } if ($fileTypesArgumentLines.Count -gt 0) { $fileTypesArgumentLines[-1] = $fileTypesArgumentLines[-1] -replace [Environment]::NewLine, '' } } else { $fileTypesArgumentLines = "-ms " } foreach ($dir in Get-ChildItem -LiteralPath "$PSScriptRoot" -Directory) { $dirSizeBytes = (Get-ChildItem -LiteralPath "$($dir.FullName)" -Recurse | Measure-Object -Property Length -sum).Sum # Keeps track of created rar files by rar.exe $createdRarFiles = New-Object System.Collections.Generic.List[System.IO.FileInfo] foreach ($size in $dictionarySizesMb) { if (($size -ne $dictionarySizesMb[0]) -and ($dirSizeBytes * 4) -le ($size * 1MB)) { $formattedDirSize = Format-FileSize -fileSize $dirSizeBytes Write-Host "Ignoring compression with too big dictionary size of $size mb for a $formattedDirSize directory: `"$($dir.FullName)`"..." -ForegroundColor Yellow continue } $outputRarFilePath = "$($dir.FullName)_$($size)mb.rar" $errorLogFilePath = "$($dir.FullName)_$($size)mb_error.log" $arguments = @( " a -u -ams -c- -cfg- -dh -ep1 -htb -idcdn -isnd- -iver -m5 -ma5 -md$($size)m", " -o+ -oc -oh -oi2 -ol -oni -qo+ -r -ri0:0 -s- -t -tk -tl -tsmca+", " $fileTypesArgumentLines", " -x`"*\$($MyInvocation.MyCommand.Name)`"", " -w`"$($env:TEMP)`"", " -ilog`"$errorLogFilePath`"", " -- `"$outputRarFilePath`"", " -- `"$($dir.FullName)\*`"" ) Write-Host "Compressing directory with $size mb dictionary size: `"$($dir.Name)`"..." #Write-Host "" #Write-Host "rar.exe arguments:" -ForegroundColor DarkGray #Write-Host ($arguments -join [Environment]::NewLine) -ForegroundColor DarkGray $previousForegroundColor = $host.UI.RawUI.ForegroundColor $host.UI.RawUI.ForegroundColor = "DarkGray" $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = $rarExecutablePath $psi.Arguments = $arguments -join ' ' $psi.RedirectStandardOutput = $false $psi.UseShellExecute = $false $psi.CreateNoWindow = $false $process = [System.Diagnostics.Process]::Start($psi) $process.WaitForExit() $host.UI.RawUI.ForegroundColor = $previousForegroundColor $outputRarFile = New-Object System.IO.FileInfo($outputRarFilePath) $formattedOutputRarFileSize = Format-FileSize -fileSize $outputRarFile.Length Write-Host "" Write-Host "Created rar with file name: $($outputRarFile.Name) ($formattedOutputRarFileSize) ($($outputRarFile.Length) bytes)" -ForegroundColor DarkGreen if ($toleranceSizeDiff -ne $null) { if ($createdRarFiles.Count -ne 0) { $outputRarFileSize = $outputRarFile.Length $formattedOutputRarFileSize = Format-FileSize -fileSize $outputRarFileSize $formattedToleranceFileSize = Format-FileSize -fileSize $toleranceSizeDiff foreach ($createdRarFile in $createdRarFiles) { if ($createdRarFile.Exists) { $createdRarFileSize = $createdRarFile.Length $formattedCreatedRarFileSize = Format-FileSize -fileSize $createdRarFileSize $diffSize = [Math]::Abs($createdRarFileSize - $outputRarFileSize) $formattedDiffSize = Format-FileSize -fileSize $diffSize if (($outputRarFileSize + $toleranceSizeDiff) -ge $createdRarFileSize) { Write-Host "" Write-Host "Size of this created RAR file ($formattedOutputRarFileSize) ($outputRarFileSize bytes) is within the $formattedToleranceFileSize tolerance difference" -ForegroundColor Yellow Write-Host "than a previously created RAR file of $formattedCreatedRarFileSize ($createdRarFileSize bytes) with smaller dictionary size..." -ForegroundColor Yellow Write-Host "Size of this created RAR file only differs by $formattedDiffSize ($diffSize bytes)." -ForegroundColor Yellow Write-Host "Deleting file: `"$($outputRarFile.Name)`"..." -ForegroundColor Yellow if ($sendRarFilesToRecycleBin) { [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($outputRarFile.FullName, 'OnlyErrorDialogs', 'SendToRecycleBin') } else { [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($outputRarFile.FullName, 'OnlyErrorDialogs', 'DeletePermanently') } Write-Host "Deletion completed." -ForegroundColor Yellow break } } } } } if (Test-Path -LiteralPath $outputRarFile.FullName -PathType Leaf) { $createdRarFiles.Add($outputRarFile) } Write-Host "" } if ($keepOnlySmallestRarFile -and $createdRarFiles.Count -gt 0) { $existingFiles = $createdRarFiles | Where-Object { $_.Exists } if ($existingFiles.Count -gt 0) { Write-Host "`$keepOnlySmallestRarFile variable is `$True. Comparing file sizes of created RAR files..." -ForegroundColor Yellow Write-Host "" $smallestFile = $existingFiles | Sort-Object Length | Select-Object -First 1 foreach ($file in $existingFiles) { if ($file -ne $smallestFile) { $formattedFileSize = Format-FileSize -fileSize $file.Length Write-Host "Deleting file: `"$($file.Name)`" ($formattedFileSize)..." -ForegroundColor Yellow if ($sendRarFilesToRecycleBin) { [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($file.FullName, 'OnlyErrorDialogs', 'SendToRecycleBin') } else { [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($file.FullName, 'OnlyErrorDialogs', 'DeletePermanently') } Write-Host "Deletion completed." -ForegroundColor Yellow Write-Host "" } } $formattedSmallestFileSize = Format-FileSize -fileSize $smallestFile.Length Write-Host "Smallest file kept: $($smallestFile.Name) ($formattedSmallestFileSize)" -ForegroundColor Green Write-Host "" } } } } function Show-GoodbyeScreen { Write-Host "Operation Completed!" -BackgroundColor Black -ForegroundColor Green Write-Host "" Write-Host "Press any key to exit..." $key = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown") Exit(0) } <# =========================================================================================== | | | Main | | | =========================================================================================== #> [System.Console]::Title = "RAR Multi-Compression Test Tool (Directories) - by Elektro" #[System.Console]::SetWindowSize(150, 45) [CultureInfo]::CurrentUICulture = "en-US" try { Set-ExecutionPolicy -ExecutionPolicy "Unrestricted" -Scope "Process" } catch { } Show-WelcomeScreen Confirm-Continue Compress-Files Show-GoodbyeScreen
|
5
en: Hoy a las 01:42
|
Iniciado por Eleкtro - Último mensaje por Eleкtro
|
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). <# =========================================================================================== | | | Variables | | | =========================================================================================== #> $rarExecutablePath = "${env:ProgramFiles}\WinRAR\rar.exe" $dictionarySizesMb = @(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048) $toleranceSizeDiff = 100kb $keepOnlySmallestRarFile = $true $sendRarFilesToRecycleBin = $false $compressedFileTypesArchive = @( "7z" , "arc", "bz2" , "bzip", "bzip2", "gz" , "gz2", "gza" , "gzi" , "gzip" , "lha", "lz" , "lz4" , "lzh" , "lzma" , "rar", "sfx", "tgz" , "tlz" , "tlzma", "uha", "zip", "zipx", "zpaq" ) $compressedFileTypesAudio = @( "aac", "ac3", "fla","flac", "m4a", "mp3", "ogg", "ogm", "usm", "wma" ) $compressedFileTypesVideo = @( "asf", "avc", "avi" , "bik" , "bk2" , "f4v" , "flv" , "m1v", "m2t", "m2ts", "m2v" , "m4v" , "mpv4", "mkv", "mov", "mp4" , "mpeg", "mpg" , "mts" , "qt" , "ts" , "vob" , "vp6" , "webm", "wmv" ) $compressedFileTypesOther = @( "avif", "jpeg", "jpg" , "gif" , "pdf", "pam" , "paq6", "paq7", "paq8", "par" , "par2", "wad" ) [string]$fileTypesToKeepUncompressed = ( $compressedFileTypesArchive + $compressedFileTypesAudio + $compressedFileTypesVideo + $compressedFileTypesOther ) -join ';' <# =========================================================================================== | | | rar.exe commands (only those used in this script) | | | =========================================================================================== <Commands> a Add files to archive <Switches> -am[s,r] Archive name and time [save, restore] -c- Disable comments show -cfg- Ignore configuration file and RAR environment variable. -dh Open shared files -ep1 Exclude base directory from names -ht[b|c] Select hash type [BLAKE2,CRC32] for file checksum -id[c,d,n,p,q] Display or disable messages -ilog[name] Log errors to file -isnd[-] Control notification sounds -m<0..5> Set compression level (0-store...3-default...5-maximal) -ma[4|5] Specify a version of archiving format -md<n>[k,m,g] Dictionary size in KB, MB or GB -ms[list] Specify file types to store. -o[+|-] Set the overwrite mode -oc Set NTFS Compressed attribute. -oh Save hard links as the link instead of the file -oi[0-4][:min] Save identical files as references -ol[a] Process symbolic links as the link [absolute paths] -oni Allow potentially incompatible names -qo[-|+] Add quick open information [none|force] -r Recurse subdirectories -ri<P>[:<S>] Set priority (0-default,1-min..15-max) and sleep time in ms -s- Disable solid archiving -t Test files after archiving -tk Keep original archive time -tl Set archive time to newest file -ts[m,c,a,p] Save or restore time (modification, creation, access, preserve) -u Update files -w<path> Assign work directory #> <# =========================================================================================== | | | .NET Code | | | =========================================================================================== #> Add-Type -TypeDefinition @" using System; using System.Runtime.InteropServices; public class Win32Functions { [DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)] public static extern long StrFormatByteSizeW(long fileSize, System.Text.StringBuilder buffer, int bufferSize); } "@ <# =========================================================================================== | | | Functions | | | =========================================================================================== #> function Format-FileSize { param( [long]$fileSize ) $buffer = New-Object System.Text.StringBuilder 260 [Win32Functions]::StrFormatByteSizeW($fileSize, $buffer, $buffer.Capacity) | Out-Null return $buffer.ToString() } function Show-WelcomeScreen { Clear-Host Write-Host "" Write-Host " $($host.ui.RawUI.WindowTitle)" Write-Host " +========================================================+" Write-Host " | |" Write-Host " | This script will use RAR.exe to compress each file in |" Write-Host " | the current working directory individually, each using |" Write-Host " | different dictionary sizes, with max. compression, |" Write-Host " | generating this way multiple RAR files for evaluating |" Write-Host " | compression rates on these dictionary sizes. |" Write-Host " | |" Write-Host " +=========================================================+" Write-Host "" Write-Host " Script Settings " -ForegroundColor DarkGray Write-Host " ===========================" -ForegroundColor DarkGray Write-Host " RAR Executable Path: $([System.IO.Path]::GetFullPath($rarExecutablePath))" -ForegroundColor Gray Write-Host "" -ForegroundColor DarkGray Write-Host " Dictionary Sizes (Megabyte): $($dictionarySizesMb -join ', ')" -ForegroundColor Gray Write-Host " The script will create a RAR archive for each specified dictionary size." -ForegroundColor DarkGray Write-Host "" -ForegroundColor DarkGray Write-Host " File Types To Keep Uncompressed: `$keepCompressedFileTypesUncompressed" -ForegroundColor Gray Write-Host " The script will instruct RAR to don't compress the specified known compressed file types." -ForegroundColor DarkGray Write-Host " (See `$keepCompressedFileTypesUncompressed variable definition to manage the file types)" -ForegroundColor DarkGray Write-Host "" -ForegroundColor DarkGray Write-Host " Tolerance File Size Difference: $(Format-FileSize -fileSize $toleranceSizeDiff)" -ForegroundColor Gray Write-Host " Any newly created RAR file whose file size compared to previously " -ForegroundColor DarkGray Write-Host " created RAR files is within the specified tolerance value, it will be deleted." -ForegroundColor DarkGray Write-Host " For example, if `$toleranceSizeDiff value is 1MB:" -ForegroundColor DarkGray Write-Host " If a created RAR file of 32 MB dict. size has a file size of 100 MB," -ForegroundColor DarkGray Write-Host " and then a newly created RAR file of 64 MB dict. size has a file size of 99 MB, " -ForegroundColor DarkGray Write-Host " the RAR file of 64 MB dict. size will be deleted because it only differs in 1MB or less." -ForegroundColor DarkGray Write-Host "" -ForegroundColor DarkGray Write-Host " Keep only smallest RAR file: $keepOnlySmallestRarFile" -ForegroundColor Gray Write-Host " If True, the script will delete any newly created RAR file " -ForegroundColor DarkGray Write-Host " whose file size is bigger than previously created RAR files." -ForegroundColor DarkGray Write-Host " Note: it takes into account the specified `$toleranceSizeDiff value." -ForegroundColor DarkGray Write-Host "" -ForegroundColor DarkGray Write-Host " Send RAR files to recycle bin: $sendRarFilesToRecycleBin" -ForegroundColor Gray Write-Host " If True, the script will send RAR files to recycle bin instead of permanently deleting them." -ForegroundColor DarkGray Write-Host "" } function Confirm-Continue { Write-Host " Press 'Y' key to continue or 'N' to exit." Write-Host "" Write-Host " -Continue? (Y/N)" do { $key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") $char = $key.Character.ToString().ToUpper() if ($char -ne "Y" -and $char -ne "N") { [console]::beep(1500, 500) } } while ($char -ne "Y" -and $char -ne "N") if ($char -eq "N") {Exit(1)} else {Clear-Host} } function Compress-Files { Add-Type -AssemblyName Microsoft.VisualBasic $dictionarySizesMb = $dictionarySizesMb | Sort-Object # Partir y formatear la cadena de file types para acomodarlo a la linea de argumentos de rar.exe if (-not [String]::IsNullOrEmpty($fileTypesToKeepUncompressed)) { $fileTypeTokens = $fileTypesToKeepUncompressed -split ';' $fileTypesArgumentLines = @() for ($i = 0; $i -lt $fileTypeTokens.Count; $i += 20) { $fileTypesArgumentLines += "-ms" + ($fileTypeTokens[$i..($i + 19)] -join ';') + [Environment]::NewLine } if ($fileTypesArgumentLines.Count -gt 0) { $fileTypesArgumentLines[-1] = $fileTypesArgumentLines[-1] -replace [Environment]::NewLine, '' } } else { $fileTypesArgumentLines = "-ms " } foreach ($inputFile in Get-ChildItem -LiteralPath "$PSScriptRoot" -File) { if ($inputFile.Name -eq [System.IO.Path]::GetFileName($PSCommandPath)) { continue } # Keeps track of created rar files by rar.exe $createdRarFiles = New-Object System.Collections.Generic.List[System.IO.FileInfo] foreach ($size in $dictionarySizesMb) { if (($size -ne $dictionarySizesMb[0]) -and ($inputFile.Length * 4) -le ($size * 1MB)) { $formattedSize = Format-FileSize -fileSize $inputFile.Length Write-Host "Ignoring compression with too big dictionary size of $size mb for a $formattedSize file: `"$($inputFile.Name)`"..." -ForegroundColor Yellow continue } $outputRarFilePath = "$($inputFile.FullName)_$($size)mb.rar" $errorLogFilePath = "$($inputFile.FullName)_$($size)mb_error.log" $arguments = @( " a -u -ams -c- -cfg- -dh -ep1 -htb -idcdn -isnd- -iver -m5 -ma5 -md$($size)m", " -o+ -oc -oh -oi2 -ol -oni -qo+ -r -ri0:0 -s- -t -tk -tl -tsmca+", " $fileTypesArgumentLines", " -x`"*\$($MyInvocation.MyCommand.Name)`"", " -w`"$($env:TEMP)`"", " -ilog`"$errorLogFilePath`"", " -- `"$outputRarFilePath`"", " -- `"$($inputFile.FullName)`"" ) Write-Host "Compressing file with $size mb dictionary size: `"$($inputFile.Name)`"..." #Write-Host "" #Write-Host "rar.exe arguments:" -ForegroundColor DarkGray #Write-Host ($arguments -join [Environment]::NewLine) -ForegroundColor DarkGray $previousForegroundColor = $host.UI.RawUI.ForegroundColor $host.UI.RawUI.ForegroundColor = "DarkGray" $psi = New-Object System.Diagnostics.ProcessStartInfo $psi.FileName = $rarExecutablePath $psi.Arguments = $arguments -join ' ' $psi.RedirectStandardOutput = $false $psi.UseShellExecute = $false $psi.CreateNoWindow = $false $process = [System.Diagnostics.Process]::Start($psi) $process.WaitForExit() $host.UI.RawUI.ForegroundColor = $previousForegroundColor $outputRarFile = New-Object System.IO.FileInfo($outputRarFilePath) $formattedOutputRarFileSize = Format-FileSize -fileSize $outputRarFile.Length Write-Host "" Write-Host "Created rar with file name: $($outputRarFile.Name) ($formattedOutputRarFileSize) ($($outputRarFile.Length) bytes)" -ForegroundColor DarkGreen if ($toleranceSizeDiff -ne $null) { if ($createdRarFiles.Count -ne 0) { $outputRarFileSize = $outputRarFile.Length $formattedOutputRarFileSize = Format-FileSize -fileSize $outputRarFileSize $formattedToleranceFileSize = Format-FileSize -fileSize $toleranceSizeDiff foreach ($createdRarFile in $createdRarFiles) { if ($createdRarFile.Exists) { $createdRarFileSize = $createdRarFile.Length $formattedCreatedRarFileSize = Format-FileSize -fileSize $createdRarFileSize $diffSize = [Math]::Abs($createdRarFileSize - $outputRarFileSize) $formattedDiffSize = Format-FileSize -fileSize $diffSize if (($outputRarFileSize + $toleranceSizeDiff) -ge $createdRarFileSize) { Write-Host "" Write-Host "Size of this created RAR file ($formattedOutputRarFileSize) ($outputRarFileSize bytes) is within the $formattedToleranceFileSize tolerance difference" -ForegroundColor Yellow Write-Host "than a previously created RAR file of $formattedCreatedRarFileSize ($createdRarFileSize bytes) with smaller dictionary size..." -ForegroundColor Yellow Write-Host "Size of this created RAR file only differs by $formattedDiffSize ($diffSize bytes)." -ForegroundColor Yellow Write-Host "Deleting file: `"$($outputRarFile.Name)`"..." -ForegroundColor Yellow if ($sendRarFilesToRecycleBin) { [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($outputRarFile.FullName, 'OnlyErrorDialogs', 'SendToRecycleBin') } else { [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($outputRarFile.FullName, 'OnlyErrorDialogs', 'DeletePermanently') } Write-Host "Deletion completed." -ForegroundColor Yellow break } } } } } if (Test-Path -LiteralPath $outputRarFile.FullName -PathType Leaf) { $createdRarFiles.Add($outputRarFile) } Write-Host "" } if ($keepOnlySmallestRarFile -and $createdRarFiles.Count -gt 0) { $existingFiles = $createdRarFiles | Where-Object { $_.Exists } if ($existingFiles.Count -gt 0) { Write-Host "`$keepOnlySmallestRarFile variable is `$True. Comparing file sizes of created RAR files..." -ForegroundColor Yellow Write-Host "" $smallestFile = $existingFiles | Sort-Object Length | Select-Object -First 1 foreach ($file in $existingFiles) { if ($file -ne $smallestFile) { $formattedFileSize = Format-FileSize -fileSize $file.Length Write-Host "Deleting file: `"$($file.Name)`" ($formattedFileSize)..." -ForegroundColor Yellow if ($sendRarFilesToRecycleBin) { [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($file.FullName, 'OnlyErrorDialogs', 'SendToRecycleBin') } else { [Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($file.FullName, 'OnlyErrorDialogs', 'DeletePermanently') } Write-Host "Deletion completed." -ForegroundColor Yellow Write-Host "" } } $formattedSmallestFileSize = Format-FileSize -fileSize $smallestFile.Length Write-Host "Smallest file kept: $($smallestFile.Name) ($formattedSmallestFileSize)" -ForegroundColor Green Write-Host "" } } } } function Show-GoodbyeScreen { Write-Host "Operation Completed!" -BackgroundColor Black -ForegroundColor Green Write-Host "" Write-Host "Press any key to exit..." $key = $Host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown") Exit(0) } <# =========================================================================================== | | | Main | | | =========================================================================================== #> [System.Console]::Title = "RAR Multi-Compression Test Tool (Files) - by Elektro" #[System.Console]::SetWindowSize(150, 45) [CultureInfo]::CurrentUICulture = "en-US" try { Set-ExecutionPolicy -ExecutionPolicy "Unrestricted" -Scope "Process" } catch { } Show-WelcomeScreen Confirm-Continue Compress-Files Show-GoodbyeScreen
|
6
en: Hoy a las 01:39
|
Iniciado por Eleкtro - Último mensaje por Songoku
|
Movidos. Hay que estar un poco mas al loro tío joio Saludos...
Songoku
|
7
en: Hoy a las 01:09
|
Iniciado por Eleкtro - Último mensaje por Eleкtro
|
Hola. En la sección de programación general ( https://foro.elhacker.net/programacion_general-b18.0/), en la primera página, publiqué varios hilos cuyos títulos empiezan con el prefijo "[APORTE]". Pues todos esos hilos en realidad deberían ir en la sección de scripting. Me he dado cuenta ahora, o mejor dicho he caído ahora en la cuenta de que estaban publicados en otra sección del foro, por que he publicado un nuevo aporte en la sección de scripting y no encontraba estos otros hilos ahí, y me ha extrañado, y pensé para mis adentros: " ¿dónde coño están mis otros hilos, me los habrán borrado sin decir nada?" . El caso es que los publiqué en la sección de Programación General de forma inconsciente, no seguí ningún criterio en especial, simplemente fue un acto inconsciente publicarlos ahí en Programación General, pero en realidad todos esos aportes son de lenguajes de scripting, así que... no están en su sección adecuada. Y es un poco absurdo, por que frecuentemente accedo a la sección de Programación General y veo mis hilos en la primera página de esa sección, y en todos los catorce hilos se puede ver perfectamente como comienzo el texto con frases similares a: "El siguiente script sirve para realizar tal cosa...", pero nada, que no he caído en la cuenta de que estaban publicados en la sección incorrecta, hasta ahora xD. Algo totalmente inconsciente por mi parte como ya digo. Son 14 hilos. Puede resultar tedioso moverlos (ya no me acuerdo cómo de fácil o tedioso era), pero bueno, un error inconsciente lo podemos tener cualquiera, disculpen. PD: Si alguien se había fijado en ello, quiero decir, que ese no era el lugar más indicado para ese tipo de aportes, ¡debería haberme dicho algo! (que no soy tan cascarrabias como algunos se pensarán). Un saludo.
|
8
en: Hoy a las 00:52
|
Iniciado por Eleкtro - Último mensaje por Eleкtro
|
Los siguientes dos scripts, desarrollados en el lenguaje Visual Basic Script y que se deben usar en conjunto con una máquina virtual de VMWare (aunque se pueden modificar para Virtual Box), sirven como atajo para montar y desmontar la unidad de red de las "carpetas compartidas" (shared folders). Utilizar estos scripts nos ahorra un valioso tiempo al no tener que usar el cliente de VMWare para abrir el menú de opciones donde desactivar y reactivar las carpetas compartidas. La idea tras esta simple herramienta es eso, ahorrar tiempo, y de esta manera poder aislar la máquina virtual del sistema operativo anfitrión impidiendo el acceso a la unidad de red de las carpetas compartidas, y volver a habilitar el acceso, tan solo haciendo dos clicks para ejecutar estos scripts. Mount Shared Folders Network Drive.vbs' Mount VMWare Shared Folders Network Drive Option Explicit Dim objFSO, objShell, objNetwork, colDrives, colNetDrives, i, msg Dim objDrive, vmWareDrive, vmWarePath, drive, path vmWareDrive = "Z:" vmWarePath = "\\vmware-host\Shared Folders" Set objFSO = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") Set objNetwork = CreateObject("WScript.Network") Set colDrives = objFSO.Drives Set colNetDrives = objNetwork.EnumNetworkDrives For i = 0 to colNetDrives.Count - 1 Step 2 drive = colNetDrives.Item(i) path = colNetDrives.Item(i+1) If (LCase(drive) = LCase(vmWareDrive)) Then If (LCase(path) = LCase(vmWarePath)) Then msg = "A network drive is already mounted with same letter and UNC path:" & vbCrLf & vbCrLf msg = msg & drive & vbTab & """" & path & """" objShell.Popup msg, 20, "Warning: Network Drives", 48 Else msg = "A network drive is already mounted with a different UNC path:" & vbCrLf & vbCrLf msg = msg & drive & vbTab & """" & path & """" objShell.Popup msg, 20, "Error: Network Drives", 16 End If WScript.Quit() End If Next For Each objDrive in colDrives drive = objDrive.DriveLetter & ":" If (LCase(drive) = LCase(vmWareDrive)) Then msg = "A local drive is already mounted with the same drive letter:" & vbCrLf & vbCrLf msg = msg & "Letter: " & drive & vbCrLf msg = msg & "FileSystem: " & objDrive.FileSystem & vbCrLf msg = msg & "Volume Name: " & objDrive.VolumeName & vbCrLf msg = msg & "Share Name: " & objDrive.ShareName objShell.Popup msg, 20, "Error: Network Drives", 16 WScript.Quit() End If Next objNetwork.MapNetworkDrive vmWareDrive, vmWarePath msg = "The following network drive was successfully mounted:" & vbCrLf & vbCrLf msg = msg & vmWareDrive & vbTab & """" & vmWarePath & """" objShell.Popup msg, 20, "Info: Network Drives", 64 WScript.Quit()
Unmount Shared Folders Network Drive.vbs' Unmount VMWare Shared Folders Network Drive Option Explicit Dim objShell, objNetwork, colDrives, i, msg Dim vmWareDrive, vmWarePath, drive, path vmWareDrive = "Z:" vmWarePath = "\\vmware-host\Shared Folders" Set objShell = CreateObject("WScript.Shell") Set objNetwork = CreateObject("WScript.Network") Set colDrives = objNetwork.EnumNetworkDrives For i = 0 to colDrives.Count - 1 Step 2 drive = colDrives.Item(i) path = colDrives.Item(i+1) If (LCase(drive) = LCase(vmWareDrive)) Then If (LCase(path) = LCase(vmWarePath)) Then objNetwork.RemoveNetworkDrive vmWareDrive, True, True msg = "The following network drive was successfully unmounted:" & vbCrLf & vbCrLf msg = msg & drive & vbTab & """" & path & """" objShell.Popup msg, 20, "Info: Network Drives", 64 Else msg = "A network drive is already mounted with a different UNC path:" & vbCrLf & vbCrLf msg = msg & drive & vbTab & """" & path & """" objShell.Popup msg, 20, "Warning: Network Drives", 16 End If WScript.Quit() End If Next msg = "No matching network drive " & """" & vmWareDrive & """" & " was found." objShell.Popup msg, 20, "Error: Network Drives", 16 WScript.Quit()
|
9
en: Hoy a las 00:47
|
Iniciado por gus879 - Último mensaje por gus879
|
alguien me puede dar una mano cn ese programa de gention de cajas? quisiera generarel serial. si alguien me puee ayudar se lo agradeceria mucho https://1fichier.com/?27jknzrjz5nv9mn26rjuen el cd dice este codigo numero de serie 8844982232 numero de licencia 14709652770 y pide un numero remocion para poder trasladar este programa de una compu a otra primero debra desinstalarlo y luego con el numero de serie y el numero de remocion podra solicitar nueva licencia.... alguien que de una mano, porfs!!!
|
10
en: Ayer a las 21:50
|
Iniciado por zelarra - Último mensaje por Eleкtro
|
Te sugiero que vuelvas a probar el script, pero esta vez ejecútalo desde la cuenta integrada "Administrador" en Windows. Para activar la cuenta integrada "Administrador", y asumiendo que tengas suficientes permisos de usuario para ello, simplemente abre la CMD y escribe el siguiente comando: net user administrador /active:yes - https://petri.com/how-to-enable-built-in-administrator-account-windows-10/Una vez que la cuenta integrada "Administrador" esté activa, simplemente inicia sesión en dicha cuenta de usuario, y ejecuta el script de PowerShell para que el script vuelva a intentar realizar las modificaciones de permisos de usuario sobre las claves de la rama HKLM.
En caso de que la metodología de adquisición de permisos sobre las claves del registro de la rama HKLM mediante PowerShell te siga fallando, en ese caso te sugiero, desde la cuenta "Administrador", seguir las siguientes indicaciones: 1. Descarga del siguiente enlace el programa de terceros por línea de comandos ' SetACL' (no confundir con ' SetACL Studio'): 2. Coloca el archivo executable descargado, "setacl.exe", junto a este batch-script en la misma carpeta: SetAcl.cmd Set "RegKey=HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PackagedCom\Package" ".\SETACL.exe" -on "%RegKey%" -ot "reg" ^ -actn "setowner" -ownr "n:%UserName%" -rec "Yes" ^ -actn "ace" -ace "n:%UserName%;p:full;m:Grant" -rec "Yes"
3. Ejecuta el script. Deberías ver algo como esto: En caso de que te de error indicando que no se ha podido realizar correctamente la operación en el registro, modifica el valor de esta variable: Set "RegKey=HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PackagedCom\Package" Por este otro valor: Set "RegKey=HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PackagedCom" Y vuelve a ejecutar el script. En caso de que te siga dando error, sigue acortando el valor, y volviendo a ejecutar el script con la clave de registro acortada, hasta llegar a la raíz HKLM: Set "RegKey=HKEY_LOCAL_MACHINE\SOFTWARE\Classes" Set "RegKey=HKEY_LOCAL_MACHINE\SOFTWARE" Set "RegKey=HKEY_LOCAL_MACHINE" La idea es modificar el propietario y obtener permisos completos de las claves de registro donde sea estrictamente necesario obtenerlos, preferiblemente NO en la rama HKLM al completo, por eso te he indicado que vayas acortando el valor (la ruta del registro) poco a poco mientras vas ejecutando el batch-script por cada cambio que hagas. Con estas indicaciones, desde el punto nº1 al nº3, se asume que entiendes los posibles riesgos que puede conllevar modificar los permisos de usuario de las claves del registro de Windows. No me hago responsable de un posible malfuncionamiento en el sistema operativo tras aplicar cambios de permisos de usuario en el registro de Windows.Aténtamente, Elektro.
|
Páginas: [ 1] 2 3 4 5 6 7 8 9 10 |
|
|