-
Notifications
You must be signed in to change notification settings - Fork 0
/
7zip-batch_compression-zip-no_raiz.ps1
150 lines (119 loc) · 4.68 KB
/
7zip-batch_compression-zip-no_raiz.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<#
Este script comprime en archivos separados todas las direcciones de archivos o directorios que se le pasen como argumento
Inspiración:
https://superuser.com/questions/311937/how-do-i-create-separate-zip-files-for-each-selected-file-directory-in-7zip
https://stackoverflow.com/questions/27194690/powershell-accessing-multiple-parameters-in-a-for-loop
https://www.vistax64.com/threads/can-you-drag-n-drop-a-file-on-top-of-a-ps-script-to-run-the-script.52062
Documentación sobre argumentos de 7zip:
https://sevenzip.osdn.jp/chm/cmdline/switches/method.htm
https://thedeveloperblog.com/7-zip-examples
Para drag and drop crear un acceso directo nuevo y otorgarle el path:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned -NonInteractive -NoExit -File "C:\Program Files\7zip-batch_compression.ps1"
A la llamada a Powershell se le pueden añadir estos argumentos:
-ExecutionPolicy RemoteSigned (permite la ejecución del script)
-NonInteractive (no se presenta prompt)
-NoExit (evita que se cierre la ventana al terminar)
-WindowStyle Minimized
-WindowStyle Hidden (DESACTIVADO No aparece la ventana de Powershell. De activarlo quizá sería mejor eliminar -NoExit)
-File (indica que se va a ejecutar un script. Debe ir en último lugar)
#>
# Con este if el programa solo se ejecuta si hay argumentos
if ($args.Length -gt 0) {
$listaDeErrores = @()
$listaDeExitos = 0
$restantes = $args.Length
if ($restantes -gt 1) {
write-host "`n`n`n`n-------- Se comprimirán $restantes archivos"
}
$args | ForEach-Object {
write-host "`n`n`n`n-------- Comprimiendo $_"
# indica el archivo que se está comprimiendo actualmente
& "C:\Program Files\7-Zip\7z.exe" -mx9 a -tzip "$_.zip" "$_\*"
# Comprobación de compresión
if ($?) {
write-host "`n---- Comprobando $_"
# indica el archivo que se está comprobando actualmente
& "C:\Program Files\7-Zip\7z.exe" t "$_.zip"
# Control de archivos erróneos
if ($?) {
$listaDeExitos += 1
}
else {
$listaDeErrores += $_
}
}
else {
$listaDeErrores += $_
}
# Control del número de archivos que faltan por comprimir
$restantes--
if ($restantes -eq 1) {
write-host `n`n"Falta 1 archivo."
}
elseif ($restantes -gt 1) {
write-host `n`n"Faltan "$restantes" archivos."
}
}
write-host `n`n`n`n
# Impresión de resultados
if ($listaDeExitos -gt 0) {
write-host "--------" $listaDeExitos "de" $args.Length "archivos comprimidos con éxito"`n
}
elseif ($listaDeExitos -eq 0) {
write-host "-------- Ningún archivo comprimido con éxito"`n
}
# Especificación de archivos erróneos
if ($listaDeErrores.Length -gt 1) {
write-host "-------- Ha habido errores comprimiendo los siguientes archivos:"
foreach ($errorActual in $listaDeErrores) {
write-host "----" $errorActual
}
}
elseif ($listaDeErrores.Length -eq 1) {
write-host "-------- Ha habido un error comprimiendo el siguiente archivo:`n----" $listaDeErrores
}
# Felicitación y tontada
elseif ($listaDeExitos -eq $args.Length) {
write-host "-------- Compresión totalmente exitosa, ¡todo ha salido a pedir de Milhouse!"
}
}
# Si no hay argumentos no se ejecuta el programa
else {
write-host "--------ERROR: No se ha indicado ningún archivo para comprimir."
}
write-host `n`n`n`n
<#
$args | ForEach-Object {
write-host "`n`n`n`n--------Comprimiendo $_"
# indica el archivo que se está comprimiendo actualmente
try {
& "C:\Program Files\7-Zip\7z.exe" -mx9 a "$_.7z" $_
try {
write-host "`n----Comprobando $_"
# indica el archivo que se está comprobando actualmente
& "C:\Program Files\7-Zip\7z.exe" t "$_.7z"
$listaDeExitos += 1
}
catch {
$listaDeErrores += $_
}
}
catch {
$listaDeErrores += $_
}
}
write-host `n`n`n`n
if ($listaDeExitos -gt 0) {
write-host $listaDeExitos "archivos comprimidos con éxito"`n
}
if ($listaDeErrores.Length -gt 0) {
write-host "Ha habido un error comprimiendo los siguientes archivos:"
foreach ($errorActual in $listaDeErrores) {
write-host "-"$errorActual
}
}
elseif ($listaDeExitos -eq $args.Length) {
write-host "Compresión totalmente exitosa, ¡todo ha salido a pedir de Milhouse!"
}
write-host `n`n`n`n
#>