Я выполняю команду и анализирую команду на основе пространства, форматирую ее и сохраняю в файле.
Вот как я написал пакетный скрипт
for /f "tokens=2,4,5" %G IN ('command') DO echo Id:%%G:~0,-1% Timestamp:%H %I > C:\Users\TJ\Documents\out1.txt
Я получаю вывод, как это
Id:3495068:~0,-1; Timestamp:2023/01/25 14:57:18
Но я пытаюсь обрезать ";" точка с запятой, но это не обрезка, а добавление логики обрезки к выводу.
Я ожидаю вывод, как.
Id:3495068 Timestamp:2023/01/25 14:57:18
Что-то, что мне здесь не хватает.
Я не знаю точного результата command
— может быть, достаточно "tokens=2,4,5 delims=; "
, чтобы избавиться от точки с запятой. (Если их несколько, вам может потребоваться пересчитать ваши жетоны)
Вывод моей команды таков. транзакция 3495068; продвигать; 2023/01/25 14:57:16 ; Пользователь: thejas
Я разделяю на основе "" (пробелов).
так что да, разделение на ;
и пробел (как в моем предыдущем комментарии) сделает то, что вы хотите (нет необходимости пост-обработки ;
).
Вы не можете подстроку metavariable
как %%G
. Вы можете только подстроку обычных переменных.
for /f "tokens=2,4,5" %G IN ('command') DO set "buildid=%G"&call echo Accurev Build Id:%buildid:~0,-1% Timestamp:%H %I> C:\Users\TJainMJ\Documents\out1.txt&set "buildid = "
должен решить вашу проблему, но было бы намного лучше использовать пакетный файл, в котором вам не нужно повторно вводить строку каждый раз, когда вы хотите его использовать.
@ECHO OFF
SETLOCAL
for /f "tokens=2,4,5" %%G IN ('command') DO set "buildid=%%G"&>"u:\q75219686.txt" call echo Accurev Build Id:%%buildid:~0,-1%% Timestamp:%%H %%I&set "buildid = "
TYPE "u:\q75219686.txt"
GOTO :EOF
где "u:\q75219686.txt"
— мой конечный файл, используемый для тестирования
Последовательные разделители рассматриваются как один. Вы разделяете пробелы, если вы просто добавите точку с запятой к разделителям, каждый пробел, каждая точка с запятой и каждая их комбинация будут рассматриваться как (один!) Разделитель.
for /f "tokens=2,4,5 delims=; " %%G IN ('echo transaction 3495068; promote; 2023/01/25 14:57:16 ; user: thejas') DO echo Accurev Build ID:%%G Timestamp:%%H
Выход:
Accurev Build ID:3495068 Timestamp:2023/01/25
Примечание: пробел должен быть последним символом в delims=
, иначе вы получите синтаксическую ошибку.
Отвечает ли это на ваш вопрос? Как лучше всего сделать подстроку в пакетном файле?