Пакетный файл поиска токен для строки - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь записать другой вывод в файл, основываясь на том, что содержит первый токен, поскольку они могут отличаться, возможно ли это?

Я записываю таблицу, основанную на результатах команды сеанса запроса, для нескольких таблиц, в результате чего выводится, как показано ниже

Server 1 
                   User1               2  Disc                        
Server 2 
                   User1               1  Disc                        
 rdp-tcp#0         User2               4  Active  rdpwd               
Server 3 Offline 
Server 4 
                   User1               8  Disc                        
                   User2               9  Disc                        
                   User3              10  Disc 

Фрагмент кода, который я сейчас должен написать:

>>%2 echo ^<table class="tftable" border="1"^>
for /f "tokens=1,2,3,4 delims=" %%a in (%1) do (
>>%2 echo ^<tr^>^<td^>%%a^</td^>^<td^>%%b^</td^>^<td^>%%c^</td^>^<td^>%%d^</td^>^</tr^>
)   
>>%2 echo ^</table^>

Я хочу использовать оператор IF Else, чтобы настроить строки таблицы, выводимые в файл, в зависимости от того, начинается ли строка строкой 'Server' или 'rdp', поскольку единственный вывод, который мне нужен в таблице, - это имя сервера и ниже это имя пользователя и состояние их сеанса.

1 Ответ

0 голосов
/ 08 мая 2018
@echo off
setlocal

echo ^<table class="tftable" border="1"^>
set "server="
for /f "delims=" %%A in (currentsessions.txt) do call :rawline "%%~A"
echo ^</table^>

:rawline
setlocal
set "line=%~1"
if not defined line exit /b

set "t1=%line:~0,18%"
call :trim t1 "%t1%"

if not defined t1 set "t1=%server%"
if "%line:~19,18%" == "" endlocal & set "server=%t1%" & exit /b
set "td=<tr><td>%t1%</td>"
call set /p "=%%td%%" <nul
if not "%t1: Offline=%" == "%t1%" (echo ^</tr^>) & exit /b

set "t2=%line:~19,18%"
call :trim t2 "%t2%"
set "td=<td>%t2%</td>"
call set /p "=%%td%%" <nul

set "t3=%line:~38,2%"
call :trim t3 "%t3%"
set "td=<td>%t3%</td>"
call set /p "=%%td%%" <nul

set "t4=%line:~42,7%"
call :trim t4 "%t4%"
set "td=<td>%t4%</td>"
call set /p "=%%td%%" <nul

set "t5=%line:~50%"
call :trim t5 "%t5%"
set "td=<td>%t5%</td></tr>"
call set /p "=%%td%%" <nul
echo.

if defined t1 endlocal & set "server=%t1%"
exit /b

:trim
setlocal
set "line=%~2"
:ltrim
if not defined line endlocal & set "%~1=" & exit /b
if "%line:~,1%" == " " set "line=%line:~1%" & goto :ltrim
:rtrim
if not defined line endlocal & set "%~1=" & exit /b
if "%line:~-1%" == " " set "line=%line:~0,-1%" & goto :rtrim
endlocal & set "%~1=%line%"
exit /b

Обрабатывает строки чтения так, чтобы можно было выполнить позиционное разделение.

Позиционная обработка выполняется, т. Е.

set "t1=%line:~0,18%"

Это начинается с символа 0 и получает следующие 18 символов.

Пробелы обрезаются на основе данных с помощью вызова :trim.

Строки call set /p "=..." <nul предназначены для вывода данных на консоль без перевод строки, чтобы следующий элемент данных мог быть добавлен к той же строке.

Переменная server обновляется только по мере необходимости, т. Е. Server 4 использует один и тот же сервер 3 раза, поэтому необходимо сохранить последний известный сервер был необходим для заполнения следующих строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...