Как прочитать содержимое файла в переменную в пакетном файле? - PullRequest
129 голосов
/ 18 июня 2010

Этот пакетный файл выпускает сборку из TEST в LIVE. Я хочу добавить в этот файл проверочное ограничение, обеспечивающее наличие соответствующего выпуска документа в определенной папке.

"C:\Program Files\Windows Resource Kits\Tools\robocopy.exe" "\\testserver\testapp$"        
"\\liveserver\liveapp$" *.* /E /XA:H /PURGE /XO /XD ".svn" /NDL /NC /NS /NP
del "\\liveserver\liveapp$\web.config"
ren "\\liveserver\liveapp$\web.live.config" web.config

Итак, у меня есть пара вопросов о том, как этого добиться ...

  1. В папке \\testserver\testapp$ есть файл version.txt, и единственным содержимым этого файла является номер сборки (например, 45 - для сборки 45) Как мне прочитать содержимое файла version.txt в переменную в пакетном файле?

  2. Как проверить, существует ли файл \\fileserver\myapp\releasedocs\ {build}.doc, используя переменную из части 1 вместо {build}?

Ответы [ 4 ]

253 голосов
/ 18 июня 2010

Считать содержимое файла в переменную:

for /f "delims=" %%x in (version.txt) do set Build=%%x

или

set /p Build=<version.txt

Оба будут действовать одинаково только с одной строкой в ​​файле, для других строк forВариант поместит строку last в переменную, в то время как set /p сначала будет использовать .

Использование переменной - как и любая другая переменная среды - этоодин, в конце концов:

%Build%

Итак, чтобы проверить существование:

if exist \\fileserver\myapp\releasedocs\%Build%.doc ...

Хотя вполне может быть, что пути UNC там не разрешены.Не могу проверить это сейчас, но имейте это в виду.

37 голосов
/ 30 июля 2015

Вы можете прочитать несколько переменных из файла следующим образом:

for /f "delims== tokens=1,2" %%G in (param.txt) do set %%G=%%H

, где param.txt:

PARAM1=value1
PARAM2=value2
...
26 голосов
/ 19 января 2014

просто сделай:

type version.txt

и будет отображаться так, как если бы вы набрали:

set /p Build=<version.txt
echo %Build%
18 голосов
/ 20 апреля 2013

Чтобы получить все строки файла, загруженного в переменную, требуется отложенное расширение, поэтому сделайте следующее:

SETLOCAL EnableDelayedExpansion

for /f "Tokens=* Delims=" %%x in (version.txt) do set Build=!Build!%%x

Существует проблема с некоторыми специальными символами, хотя особенно ;,% и !

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