Этот пакетный файл выпускает сборку из 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
Итак, у меня есть пара вопросов о том, как этого добиться ...
В папке есть
version.txt
файл\\testserver\testapp$
, и единственным содержимым этого файла является номер сборки (например, 45 - для сборки 45). Как мне прочитать содержимоеversion.txt
файла в переменную в пакетном файле?Как проверить
\\fileserver\myapp\releasedocs\ {build}.doc
, существует ли файл, используя переменную из части 1 вместо {build}?
источник
set
Метод читает только около 1024 символов, почему это?cmd
. Это ужасный язык для надежных сценариев.set /p
вызываетcmd!ReadBufFromInput
с выделенным стеком буфер для чтения 1023 широких символов (2046 байт). Он считывает из файла 1023 байта, предполагая 1 байт на символ OEM / ANSI, но декодирует файл с использованием текущей кодовой страницы, которая не обязательно является OEM / ANSI. В худшем случае это кодовая страница 65001 и файл, заполненный 4-байтовыми символами UTF-8 (например, древний скрипт). Вы получите 255 символов плюс частично декодированный символ, сохраненный в качестве символа замены, U + FFFD.for /f "usebackq" %%x in ("path with spaces.txt") ...
.help for
упоминает об этом, кстати.Вы можете прочитать несколько переменных из файла следующим образом:
где param.txt:
источник
(param.txt)
должно быть(version.txt)
и должно содержатьсяBuild=45
%%G
на%G
просто сделать:
и он будет отображаться так, как будто вы набрали:
источник
Чтобы загрузить все строки файла в переменную, требуется отложенное расширение, поэтому сделайте следующее:
Существует проблема с некоторыми специальными символами, хотя особенно
;
,%
и!
источник
set
выражение в двойных кавычках может избежать проблем с по крайней мере некоторых специальных символов:set "Build=!Build!%%x"
.set err=
(следующая строка)for /f "delims=" %%x in (err.tmp) do set "err=%err% %%x"