Как читать содержимое файла в переменной в пакетном файле?
Этот командный файл освобождает сборку от 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%