Как читать содержимое файла в переменной в пакетном файле?

Этот командный файл освобождает сборку от 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

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

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

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

Ответ 1

Прочитайте содержимое файла в переменной:

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

или

set /p Build=<version.txt

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

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

%Build%

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

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

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

Ответ 2

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

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

где param.txt:

PARAM1=value1
PARAM2=value2
...

Ответ 3

просто выполните:

type version.txt

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

set /p Build=<version.txt
echo %Build%

Ответ 4

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

SETLOCAL EnableDelayedExpansion

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

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

Ответ 5

@echo off
set str=^&Type file.txt
echo %str%