Показать полную графическую версию : [решено] Извлечение .ico файлов
Необходимо извлечь из .exe файла .ico при помощи BAT (можно использовать сторонние утилиты).
Я нашел одну утилиту - iconsext, но она извлекает все иконки, а надо чтобы извлекала первую.
greg zakharov
09-11-2016, 16:19
Необходимо извлечь из .exe файла .ico при помощи BAT (можно использовать сторонние утилиты)
Как на счет PowerShell?
Add-Type -AssemblyName System.Drawing
$ico = [Drawing.Icon]::ExtractAssociatedIcon('C:\Windows\explorer.exe')
$ms = New-Object IO.MemoryStream
$ico.Save($ms)
[IO.File]::WriteAllBytes('C:\output\1.ico', $ms.ToArray())
$ms.Dispose()
$ico.Dispose()
Как на счет PowerShell? »
Я в Bat файлах далекий, а PowerShell для меня - темный лес.
Пытался его запустить через Bat, не получилось, а через powershell_ise.exe выдает ошибку.
PS C:\Windows\System32\WindowsPowerShell\v1.0> C:\Downloads\New.ps1
Невозможно загрузить файл C:\Downloads\New.ps1, так как выполнение сценариев отключено в этой системе. Для получения дополнительных сведений см. about_Executio
n_Policies по адресу http://go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : Ошибка безопасности: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnauthorizedAccess
PS C:\Windows\System32\WindowsPowerShell\v1.0>
vickt, так пройдите по указанному адресу, прочитайте и включите исполнение неподписанных локальных скриптов.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned »
Я уже отключил политику выполнения Windows PowerShell.
Выдает следующее через powershell_ise.exe
PS C:\Windows\System32\WindowsPowerShell\v1.0> C:\Downloads\New.ps1
Не удалось найти тип [Drwaing.Icon].
C:\Downloads\New.ps1:2 знак:8
+ $ico = [Drwaing.Icon]::ExtractAssociatedIcon('C:\Windows\explorer.exe ...
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (Drwaing.Icon:TypeName) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
Невозможно вызвать метод для выражения со значением NULL.
C:\Downloads\New.ps1:5 знак:1
+ $ico.Save($ms)
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Исключение при вызове "WriteAllBytes" с "2" аргументами: "Не удалось найти часть пути "C:\output\1.ico"."
C:\Downloads\New.ps1:6 знак:1
+ [IO.File]::WriteAllBytes('C:\output\1.ico', $ms.ToArray())
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DirectoryNotFoundException
Невозможно вызвать метод для выражения со значением NULL.
C:\Downloads\New.ps1:9 знак:1
+ $ico.Dispose()
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
PS C:\Windows\System32\WindowsPowerShell\v1.0>
Мне надо запустить из Bat файла. Как это сделать?
vickt, поменяйте во второй строке:
$ico = [Drwaing.Icon]::ExtractAssociatedIcon('C:\Windows\explorer.exe')
на:
$ico = [Drawing.Icon]::ExtractAssociatedIcon('C:\Windows\explorer.exe')
greg zakharov
09-11-2016, 19:32
vickt, сохраните как бат, например, iconer.cmd:
<# :
@echo off
setlocal
powershell /noprofile /executionpolicy bypass^
"&{[ScriptBlock]::Create((Get-Content '%~f0') -join [Char]10).Invoke(@(&{$args}%*))}"
endlocal
exit /b
#>
Add-Type -AssemblyName System.Drawing
try {
$ico = [Drawing.Icon]::ExtractAssociatedIcon($args[0])
$ms = New-Object IO.MemoryStream
$ico.Save($ms)
[IO.File]::WriteAllBytes($args[1], $ms.ToArray())
}
catch { $_ }
finally {
if ($ms) { $ms.Dispose() }
if ($ico ) { $ico.Dispose() }
}
Пример вызова будет выглядеть так:
iconer.cmd C:\Windows\explorer.exe E:\out\1.ico
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.