I am trying to read some info from a text file by using windows command line, and save it to a variable just like "set info =1234"
Below is the content of the txt file, actually I just need the revision number, and the location of it is always the same line 5, and from column 11 to 15. In the sample it's 1234, and I am wondering is there a way to save it to a variable in Dos command line.
Thanks a lot!
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)
if you have can use GNU tools, such as gawk
Here's a one line version:
The following code snippet shows how to do this:
Its output is
1234
as desired.The
setlocal
is what I use in every script to ensure variables are treated in a known way. Thefor
statement processes each line in the input file (thedelims
bit stops the line from being tokenised into separate words).The
!line:~
bits are substrings with!line:~0,10!
being the first ten characters and!line:~10!
being the rest.So, basically, it checks every line to see if it starts with
"Revision: "
and, if so, extracts the rest of the line for later.Use the
for
command to parse the file:Knowing how to use CMD scripting deftly is great, but using PowerShell is even better. Here's one way to do it:
What's going on?
$revision
is a variablegc
isGet-Content
, akatype
. Each line in the file becomes a string in a sequence (pipeline).?
isWhere-Object
. It filters the objects in a pipeline based on a condition.{}
delimits a script block$_
is the current object in the pipeline.-split
invokesString.Split()
in .NET, giving you an array of objects[1]
indexes in to the array