Как получить вывод цикла FOR в переменную в командном файле - PullRequest
0 голосов
/ 28 октября 2010

У меня есть такой файл, который нужно проанализировать и извлечь номер версии.

[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible 
[assembly: AssemblyFileVersion("0.4.2")]
...
...

Мне нужно разобрать его и извлечь из него 0.4.2.

Я должен сделать это только в командном файле Windows. Я сделал это следующим образом, но я знаю, что это НЕ лучший способ.

setlocal enabledelayedexpansion
SET VERSIONSTR=

REM This is an ugly way to do this, because due to some reason I cant save output of for loop to a variable
REM I would like this in a variable instead of a temp file.
FOR /f "tokens=2*" %%j in (AssemblyInfo.cs) do  @echo %%j  >> tempfile.txt

REM The "AssemblyFileVersion" line has the version number.
REM I would like this in a variable instead of a temp file.
FOR /f %%i in (tempfile.txt) do @echo %%i | find "AssemblyFileVersion" >> anothertempfile.txt

REM Now this for loop will set a variable.
FOR /f %%k in (anothertempfile.txt) do set VERSIONSTR=%%k

REM Now the line is `AssemblyFileVersion("0.4.2")]` so, I am getting the substring from 21st character
REM till the end and then removing last 3 characters, getting us the string 0.4.2
SET VERSIONSTR=!VERSIONSTR:~21,-3!

Я ненавижу иметь это уродство в своем коде, какие-либо идеи о том, как я могу изменить это? По крайней мере, я хотел бы узнать, как получить вывод цикла for в переменной в пакетном файле Windows.

1 Ответ

0 голосов
/ 28 октября 2010
for /f "tokens=2 delims=()" %%a in ('findstr AssemblyFileVersion AssemblyInfo.cs') do set Version=%%~a
echo %Version%

Это немного уродливо, потому что я не могу (очевидно) использовать кавычки в качестве разделителей, поэтому я выбрал круглые скобки и удалил кавычки с %%~x. Кстати, вы можете избежать всех временных файлов здесь.

Приведенный выше код просто непосредственно берет соответствующую строку (с findstr) и маркирует ее с помощью for /f.

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