Я пытаюсь считать некоторую информацию из текстового файла при помощи командной строки окон и сохранить его к переменной точно так же, как "информация о наборе =1234"
Ниже содержание txt файла, на самом деле мне просто нужно число пересмотра, и местоположение его всегда является той же строкой 5, и из столбца 11 - 15. В образце это - 1234, и я задаюсь вопросом, там способ сохранить его к переменной в командной строке DOS.
Большое спасибо!
svninfo.txt:
Path: .
URL: https://www.abc.com
Repository Root: https://www.abc.com/svn
Repository UUID: 12345678-8b61-fa43-97dc-123456789
Revision: 1234
Node Kind: directory
Schedule: normal
Last Changed Author: abc
Last Changed Rev: 1234
Last Changed Date: 2010-04-01 18:19:54 -0700 (Thu, 01 Apr 2010)
Вот однострочная версия:
for /f "tokens=2" %%i in ('findstr Revision: input.txt') do set revision=%%i
, если у вас есть, можете использовать инструменты GNU, такие как gawk
@echo off
for /F %%a in ('gawk -F":" "$1~/Revision/{print $2}" file') do (
set var=%%a
)
echo %var%
Знание того, как ловко использовать сценарии CMD, - это здорово, но использование PowerShell даже лучше. Вот один из способов сделать это:
$revision = (( gc .\svninfo.txt | ? { $_.StartsWith( 'Revision: ' ) } ) -split ' ')[1]
Что происходит?
$ revision
- это переменная
gc
is Get-Content
, также известная как type
]. Каждая строка в файле становится строкой в последовательности (конвейере).
?
равно Where-Object
. Он фильтрует объекты в конвейере на основе условия.
{}
разделяет блок сценария
$ _
- текущий объект в конвейере.
-split
вызывает String.Split ()
в .NET, предоставляя вам массив объектов
[1]
индексов в массиве
Следующий фрагмент кода показывает, как это сделать:
@echo off
setlocal enableextensions enabledelayedexpansion
set revision=
for /f "delims=" %%a in (input.txt) do (
set line=%%a
if "x!line:~0,10!"=="xRevision: " (
set revision=!line:~10!
)
)
echo !revision!
endlocal
Его вывод будет 1234
, как и нужно.
setlocal
- это то, что я использую в каждом скрипте, чтобы гарантировать, что переменные обрабатываются известным способом. Оператор for
обрабатывает каждую строку во входном файле (бит delims
предотвращает разметку строки на отдельные слова).
! Line: ~
биты - это подстроки с ! Line: ~ 0,10!
- первые десять символов и ! Строка: ~ 10!
остальное.
По сути, он проверяет каждую строку, чтобы увидеть, начинается ли она с «Revision:»
, и, если да, извлекает оставшуюся часть строки для дальнейшего использования.
Используйте команду for
, чтобы проанализировать файл:
for /f "skip=4 tokens=2" %%l in (svninfo.txt) do (
set revision=%%l
goto gotrev
)
:gotrev
echo revision is %revision%