Я знаю, что этот вид проблемы будет очень легок для Вас, но я - общий новичок в пакетном режиме.
Вопрос состоит в том, как код bat-файла должен быть похожим для генерации нового txt файла от определенного.
например.
У меня есть отчет txt
Displaying status for license file: 7788@Server01
License Server: server01
License In Use Free
------- ------ ----
Design* 1 6
(user1@host1) 127 server01 7788 4402
Assembly* 0 4
Pro 0 15
AdvSE 2 3
(user2@host2) AdvSE server01 7788 2706
(user3@host3) AdvSE server01 7788 1503
SingleSite_License 1 3
(user4@host4) SingleSite_License server01 7788 2003
Intra_CLIENT_License 1 4
(user2@host2) Intra_CLIENT_License server01 7788 2003
CAD 1 32
^(user2@host2) CAD server01 7788 501
* = License Extensions - Available only on startup.
^ = Borrowed License.
Press any key to continue . . .
Что я хочу иметь в новом файле от этого, только строки:
SingleSite_License 3
Intra_CLIENT_License 9
но и SingleSite_License и Intra_Client_License должны быть взяты от 1-й найденной строки - другой, не необходимы.
отчет txt может отличаться, и лицензии могут быть, показал в другом порядке.
если это не возможный - другое решение может быть просто, только Свободное значение будет записано в новом txt файле - f.e 3 и 9. так последняя строка в строке, которая содержит определенные слова
спасибо за любые подсказки
Напишите приложение C. Пакетная обработка излишне громоздка и, вероятно, даже не может выполнять такого рода манипуляции с потоками.
Не знаю, откуда у вас цифра 9
для Intra_CLIENT_License
(разве это не 4
?), Но этот сценарий распечатает бесплатные лицензии для этих двух кодов продуктов:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "tokens=1,3" %%a in ('type infile.txt') do (
if "x%%a"=="xSingleSite_License" (
echo %%a %%b
)
if "x%%a"=="xIntra_CLIENT_License" (
echo %%a %%b
)
)
endlocal
Я в основном вырезал и вставил вашу расшифровку в файл infile.txt
и запустил этот сценарий, чтобы получить:
SingleSite_License 3
Intra_CLIENT_License 4
(вы можете заменить тип infile. txt
любой командой, необходимой для генерации этого вывода).
Разбивка:
setlocal
просто устанавливает cmd.exe
, чтобы разрешить расширения и отложенное расширение переменных среды. Все мои сценарии начинаются с этого, потому что это очень полезно.
Цикл for
в основном обрабатывает одну строку за раз, захватывая токены 1 и 3 ( a
и b
) от каждого из них.
Затем достаточно просто проверить a
на предмет необходимых лицензионных значений и, если они совпадают, вывести их вместе с b
.
Загрузите UnxUtils и используйте потоковые процессоры Unix. Возможно, тоже можно будет использовать Powershell.