Показать полную графическую версию : [решено] Поиск нескольких строк в файле и запись их в переменную
Всем привет. Помогите пожалуйста разобраться с поиском информации в wim-файле.
Не хитрыми действиями достал почти всю инфу о содержимом файла, кроме имеющихся языков.
Нужно осуществить поиск всех имеющихся языков в образе при помощи Dism и вывести их список.
@echo off
cls
:inform
for /f "tokens=* delims=: " %%c in ('Dism.exe /English /Get-WimInfo /WimFile:"C:\install.wim" /Index:1 ^| findstr /i Languages') do (set ImgLanguages=%%c)
echo.
echo Список языков: %ImgLanguages%
pause
Если таким способом искать индекс, имя или другую информацию, то никаких проблем не возникает.
Но с языками дело обстоит иначе. В "findstr" искомое слово "Languages" после себя не содержит никаких данных, все данные (список имеющихся языков) расположены на строках ниже(в столбик).
Вот тут я и споткнулся. Как вывести список языков расположенных ниже "Languages" и записать их в переменную(ые)? Прикреплю скрин отображения информации в Dism.
Alex S, в PowerShell
(Get-WindowsImage -imagepath "E:\sources\install.wim" -index 1).languages
https://docs.microsoft.com/powershell/module/dism/get-windowsimage?view=win10-ps
[PS <4> C:\…\system32] Get-WindowsImage -imagepath "E:\sources\install.wim" -index 1
ImageIndex : 1
ImageName : Windows 10 Домашняя
ImageDescription : Windows 10 Домашняя
ImageSize : 14*337*146*177 bytes
WIMBoot : False
Architecture : x64
Hal :
Version : 10.0.17763.107
SPBuild : 107
SPLevel : 0
EditionId : Core
InstallationType : Client
ProductType : WinNT
ProductSuite : Terminal Server
SystemRoot : WINDOWS
DirectoryCount : 20320
FileCount : 91910
CreatedTime : 30.10.2018 2:17:06
ModifiedTime : 30.10.2018 2:46:59
Languages : ru-RU (Default)
[PS <5> C:\…\system32] (Get-WindowsImage -imagepath "E:\sources\install.wim" -index 1).languages
ru-RU
За неимением на чем показать - так:
file.txt
stroka1 : z1
stroka2 : z2
Languages :
[tab]en-US
[tab]ru-RU (Default)
The operation ...
код
@echo off
for /f "delims=" %%a in ('findstr /rc:"^ " "file.txt"') do call :# "%%~a"
echo %A: =%
echo %B: =%
pause& exit
:#
set "A=%B%"
set "B=%~1"
exit /b
вывод:
en-US
ru-RU (Default)
Пробовал так, результата нет:
for /f "delims=" %%a in ('DISM /English /Get-WimInfo /WimFile:"C:\install.wim" /Index:1 ^| findstr /rc:"^ "') do call :# "%%~a"
Решил использовать другую программку (ImageX.exe), она в отличие от Dism при выводе информации из wim-файла выдает следующее:
Languages :
en-US
ru-RU (Default)
<LANGUAGES>
<LANGUAGE>en-US</LANGUAGE>
<LANGUAGE>ru-RU</LANGUAGE>
При использовании такого способа:for /f "tokens=2 delims=:<> " %%a in ('Imagex.exe /info "C:\install.wim" 1 ^| findstr /i Language') do call :# "%%~a"
Получаю то что нужно(почти). Выводит список из двух имеющихся языков, но если язык в файле только один, то получаю:
Обнаруженные языки:
=
en-US
Для продолжения нажмите любую клавишу.
Остается вопрос, как убрать лишнее из окна вывода(знак равно), ну и что будет если языков будет больше?
ну и что будет если языков будет больше? »
Чем не подходит вариант на powershell?
Ну, если прям надо именно cmd, то:
for /f "delims=" %%a in (
'dism /english /get-imageinfo /imagefile:"d:\install.wim" /index:1 ^|findstr /i "ru-ru en-us en-gb de-de fr-ca zu-za"'
) do echo %%~a
и создавать нумерованные переменные по числу строк...
MS-LCID (https://msdn.microsoft.com/en-us/library/cc233982.aspx)
Чем не подходит вариант на powershell? »
Не работает у меня PowerShell почему-то. Думал может из-за того что старая версия.
Обновил его и так же не хочет. Такое ощущение что он и не знает команду "Get-WindowsImage", постоянно смс-ка с ошибкой...
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.
PS C:\Windows\System32\WindowsPowerShell\v1.0> Get-WindowsImage -imagepath "C:\W
ork\Image\sources\install.wim" -index 1
Get-WindowsImage : The term 'Get-WindowsImage' is not recognized as the name of
a cmdlet, function, script file, or operable program. Check the spelling of th
e name, or if a path was included, verify that the path is correct and try agai
n.
At line:1 char:1
+ Get-WindowsImage -imagepath "C:\Work\Image\sources\install.wim" -inde ...
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-WindowsImage:String) [], Co
mmandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Alex S, установите WMF 5.1 https://www.microsoft.com/en-us/download/details.aspx?id=54616
У вас древняя версия пошика
Обновил его и так же не хочет. »
До какой версии?
$psversiontable
?
установите WMF 5.1 »
Ну, и на всякий случай, вот версия пакетника с нумерованными переменными:
@echo off
set "wim=d:\install.wim"
>nul 2>&1 net session||(echo.Запустите батник от имени админа&pause&exit /b)
set /a "i=1"
for /f "delims=" %%a in (
'dism /english /get-imageinfo /imagefile:"%wim%" /index:1 ^|findstr /i "ru-ru en-us en-gb de-de fr-ca zu-za"'
) do call :# %%~a
set x
pause&exit /b
:#
set "x%i%=%~1"
set /a "i+=1"
exit /b
До какой версии? »
PSVersion 5.1.14409.1005
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.14409.1005
И в ней тоже вылет ошибки...
Ну, и на всякий случай... »
Спасибо большое!!! Работает.
Только на выходе приписывает "х" к каждому найденному языку. Это нельзя убрать?
Обнаруженные языки:
x1=en-US
x2=ru-RU
Только на выходе приписывает "х" к каждому найденному языку. Это нельзя убрать? »
Не приписывает. x1/x2/x3…xN — это новосозданные переменные окружения, каждая из которых содержит один из найденных языков. По команде:
set x »
Вы видите все переменные окружения, начинающиеся на «x», вместе с их значениями. Можете открыть командную строку, набрать в ней, например, «set pro», нажать «Enter» и посмотреть на получившийся результат.
И в ней тоже вылет ошибки... »
Быть не может... ошибка та же? Покажите, плиз.
Что выдает:
get-command -mod dism
?
Только на выходе приписывает "х" к каждому найденному языку. Это нельзя убрать? »
откуда xN, уже объяснили. Вам же надо было в переменные записать строки, вот и... :)
Вместо set x, можно написать:
echo [%x1%] - [%x2%] - [%x3%]
Быть не может... ошибка та же? Покажите, плиз. »
Отправил что показывает через лс, чтобы тему не засорять.
Всем спасибо за помощь. Из написанного в теме, выбрал для себя самое подходящее.
Тему считаю решённой.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.