Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск нескольких строк в файле и запись их в переменную

Ответить
Настройки темы
CMD/BAT - [решено] Поиск нескольких строк в файле и запись их в переменную

Аватара для Alex S

Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png Info.png
(53.3 Kb, 7 просмотров)
Всем привет. Помогите пожалуйста разобраться с поиском информации в 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.

Отправлено: 23:39, 13-02-2019

 

(*.*)


Сообщения: 36490
Благодарности: 6675

Профиль | Сайт | Отправить PM | Цитировать


Alex S, в PowerShell
Код: Выделить весь код
(Get-WindowsImage -imagepath "E:\sources\install.wim" -index 1).languages
https://docs.microsoft.com/powershel...?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

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:16, 14-02-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


За неимением на чем показать - так:
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)
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:40, 14-02-2019 | #3


Аватара для Alex S

Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


Пробовал так, результата нет:
Код: Выделить весь код
for /f "delims=" %%a in ('DISM /English /Get-WimInfo /WimFile:"C:\install.wim" /Index:1 ^| findstr /rc:"^	"') do call :# "%%~a"
Решил использовать другую программку (ImageX.exe), она в отличие от Dism при выводе информации из wim-файла выдает следующее:
Вывод из Dism.exe
Languages :
en-US
ru-RU (Default)

Вывод из ImageX.exe
<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
Для продолжения нажмите любую клавишу
.
Остается вопрос, как убрать лишнее из окна вывода(знак равно), ну и что будет если языков будет больше?

Отправлено: 10:42, 14-02-2019 | #4


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Alex S:
ну и что будет если языков будет больше? »
Чем не подходит вариант на 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

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:10, 14-02-2019 | #5


Аватара для Alex S

Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Чем не подходит вариант на 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

Отправлено: 14:24, 14-02-2019 | #6


(*.*)


Сообщения: 36490
Благодарности: 6675

Профиль | Сайт | Отправить PM | Цитировать


Alex S, установите WMF 5.1 https://www.microsoft.com/en-us/down....aspx?id=54616

У вас древняя версия пошика
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:20, 14-02-2019 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Alex S:
Обновил его и так же не хочет. »
До какой версии?
Код: Выделить весь код
$psversiontable
?
Цитата Vadikan:
установите 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

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:30, 14-02-2019 | #8


Аватара для Alex S

Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
До какой версии? »
Версия PowerShell

PSVersion 5.1.14409.1005
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.14409.1005

И в ней тоже вылет ошибки...

Цитата YuS_2:
Ну, и на всякий случай... »
Спасибо большое!!! Работает.
Только на выходе приписывает "х" к каждому найденному языку. Это нельзя убрать?

На выходе...

Обнаруженные языки:
x1=en-US
x2=ru-RU

Отправлено: 16:04, 14-02-2019 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Alex S:
Только на выходе приписывает "х" к каждому найденному языку. Это нельзя убрать? »
Не приписывает. x1/x2/x3…xN — это новосозданные переменные окружения, каждая из которых содержит один из найденных языков. По команде:
Цитата YuS_2:
set x »
Вы видите все переменные окружения, начинающиеся на «x», вместе с их значениями. Можете открыть командную строку, набрать в ней, например, «set pro», нажать «Enter» и посмотреть на получившийся результат.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:25, 14-02-2019 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск нескольких строк в файле и запись их в переменную

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Поиск строк в файле и запись в новый файл vision-d Скриптовые языки администрирования Windows 17 06-10-2016 09:14
CMD/BAT - Поиск цифр в текстовом файле и последующий их поиск в названии файлов массива (лог.) antares_80@vk Скриптовые языки администрирования Windows 10 25-10-2015 11:34
CMD/BAT - Проверка наличия нескольких строк в файле V!RTuE Скриптовые языки администрирования Windows 10 08-09-2014 05:08
CMD/BAT - Поиск строк в файле и замена их на числа,сгенерированные по маске. galclerik Скриптовые языки администрирования Windows 17 19-12-2013 11:59
CMD/BAT - Замена нескольких строк в файле bcubbs@fb Скриптовые языки администрирования Windows 3 24-01-2013 14:01




 
Переход