Войти

Показать полную графическую версию : [решено] Распаковка образов (7z)


olga_maksi29
02-09-2022, 12:53
Здраствуйте . Я здесь новенькая, прошу вашей помощи.
Я уверена для вас задача пустяковая - надеюсь вы сможете мне помочь.
Хотелось бы автоматизировать один простой, но длительный и скучный процесс .
Процесс состоит из 3 этапов которые хотелось бы автоматизировать скриптом.
Имеется папка где хранятся установочные образы систем
имеется следующая структура ( имена ISO постоянно меняются )
\\192.168.1.5\install\ISO\ISOWIN\

en-ru_windows_10_version_21h2_with_update_19044.1889_aio_32in1_x64_v22.08.10_by_adguard.iso
en-ru_windows_8.1_with_update_9600.20520_aio_18in1_x64_v22.08.10_by_adguard.iso
en-ru_windows_7_sp1_with_update_7601.26065_aio_24in1_x86_v22.08.10_by_adguard.iso
и т.д

стоит задача у меня-
1) Автоматизировать извлечение с каждого образа, одного файла sources\install.esd на USB носитель в определенный каталог без сохранения структуры .

2) При извлечении изменить имя файла с install.esd на имя iso образа до разрядности - что бы вышло примерно так
install_en-ru_windows_8.1_with_update_9600.20520_aio_18in1_x64.esd
install_en-ru_windows_10_version_21h2_with_update_19044.1889_aio_32in1_x64.esd
install_en-ru_windows_7_sp1_with_update_7601.26065_aio_24in1_x86.esd

3) создать одноименные ко 2 пункту txt файлы, с содержащими полные названиями образа внутри .
install_en-ru_windows_8.1_with_update_9600.20520_aio_18in1_x64.txt с содержанием en-ru_windows_8.1_with_update_9600.20520_aio_18in1_x64_v22.08.10_by_adguard
install_en-ru_windows_10_version_21h2_with_update_19044.1889_aio_32in1_x64.txt с содержанием en-ru_windows_10_version_21h2_with_update_19044.1889_aio_32in1_x64_v22.08.10_by_adguard
install_en-ru_windows_7_sp1_with_update_7601.26065_aio_24in1_x86.txt с содержанием en-ru_windows_7_sp1_with_update_7601.26065_aio_24in1_x86_v22.08.10_by_adguard

Надеюсь вы сможете мне помочь.
По первому пункту -все просто 7z хорошо справляется . Но вот как обрезать имя файла и создать тектовый файл - я особо не понимаю

DJ Mogarych
02-09-2022, 17:42
Powershell

$iso = dir "C:\temp\ISOWIN\*.iso"
$usb = "C:\temp\ISOWIN-USB"

$iso |% {
& 'C:\Program Files\7-Zip\7z.exe' e $_.FullName sources\install.esd -o"$usb" -y
$esdBaseName = "install_$($_.BaseName -replace '^(.+_x[68][46]).*','$1')"
Get-Item "$usb\install.esd" |Rename-Item -NewName "$esdBaseName.esd"
$_.BaseName > "$usb\$esdBaseName.txt"
}

olga_maksi29
03-09-2022, 00:56
Powershell »
Спасибо огромное .
идеально .
но вылезли пару проблем
текстовый файл сохраняется в кодировке UTF16. можно ли в в стандартной 1251 ? то программа по считыванию данных крошится
и можно ли во втором и третьем пункте убрать с имени начало en-ru_windows_ ? и идеально бы без привязки языка .en-ru_ и строчку _with_update но это мелочи

DJ Mogarych
03-09-2022, 07:51
$iso = dir "C:\temp\ISOWIN\*.iso"
$usb = "C:\temp\ISOWIN-USB"

$iso |% {
& 'C:\Program Files\7-Zip\7z.exe' e $_.FullName sources\install.esd -o"$usb" -y
$esdBaseName = "install_$($_.BaseName -replace '^\w{2}-\w{2}_' -replace '_with_upd\w+_','_' -replace '^(.+_x[68][46]).*','$1')"
del "$usb\$esdBaseName.esd" -ErrorAction SilentlyContinue
Get-Item "$usb\install.esd" |Rename-Item -NewName "$esdBaseName.esd"
$_.BaseName |Out-File "$usb\$esdBaseName.txt" -Encoding default
}

olga_maksi29
03-09-2022, 10:38
DJ Mogarych,
если можно то пару дополнений к изначальной теме-
имеем образ -
en-ru_windows_10_version_21h2_with_update_19044.1889_aio_32in1_x86_v22.08.10_by_adguard.iso

что бы получились бы имя у esd
install_en-ru_win_10_ver_21h2_19044.1889_aio_32in1_x86.esd

создался бы одноименный текстовый файл
install_en-ru_win_10_ver_21h2_19044.1889_aio_32in1_x86.esd.txt

с содержимым
en_ru_win_10_ver_21h2_19044.1889_aio_32in1_x86_v22.08.10

т.е можно вместо windows - win , вместо version - ver ( имеется не во всех файлах), убрать _with_update и убрать _by_adguard

DJ Mogarych
03-09-2022, 11:05
$iso = dir "C:\temp\ISOWIN\*.iso"
$usb = "C:\temp\ISOWIN-USB"

$iso |% {
& 'C:\Program Files\7-Zip\7z.exe' e $_.FullName sources\install.esd -o"$usb" -y
$txtName = $_.BaseName -replace 'windows_','win_' -replace 'version_','ver_' -replace '_with_upd\w+_','_' -replace '_by_adguard'
$esdName = "install_$($txtName -replace '^(.+_x[68][46]).*','$1').esd"
del "$usb\$esdName" -ErrorAction SilentlyContinue
Get-Item "$usb\install.esd" |Rename-Item -NewName "$esdName"
$txtName |Out-File "$usb\$esdName.txt" -Encoding default
}




© OSzone.net 2001-2012