Esse arquivo em lotes libera uma compilação do TEST para o LIVE. Desejo adicionar uma restrição de verificação neste arquivo que garanta a existência de um documento de liberação da empresa em uma pasta específica.
"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
Então, eu tenho algumas perguntas sobre como conseguir isso ...
Há um
version.txt
arquivo na\\testserver\testapp$
pasta, e o único conteúdo desse arquivo é o número da compilação (por exemplo, 45 - para a compilação 45) Como leio o conteúdo doversion.txt
arquivo em uma variável no arquivo em lotes?Como verifico se
\\fileserver\myapp\releasedocs\ {build}.doc
existe um arquivo usando a variável da parte 1 no lugar de {build}?
fonte
set
método lê apenas cerca de 1024 caracteres, por que isso?cmd
. É uma linguagem horrível para scripts confiáveis.set /p
chamacmd!ReadBufFromInput
com um buffer alocado de pilha para ler 1023 caracteres largos (2046 bytes). Ele lê 1023 bytes do arquivo, assumindo 1 byte por caractere OEM / ANSI, mas decodifica o arquivo usando a página de código atual, que não é necessariamente OEM / ANSI. O pior caso é a página de código 65001 e um arquivo preenchido com caracteres UTF-8 de 4 bytes (por exemplo, um script antigo). Você receberá 255 caracteres, além de um caractere parcialmente decodificado armazenado como o caractere de substituição, U + FFFD.for /f "usebackq" %%x in ("path with spaces.txt") ...
.help for
menciona isso, a propósito.Você pode ler várias variáveis do arquivo como este:
em que param.txt:
fonte
(param.txt)
deve ser(version.txt)
e deve conterBuild=45
%%G
com%G
apenas faça:
e será exibido como se você digitasse:
fonte
Para obter todas as linhas do arquivo carregadas na variável, é necessária a Expansão atrasada, assim como o seguinte:
Há um problema com alguns caracteres especiais, embora especialmente
;
,%
e!
fonte
set
expressão dentro aspas duplas poderia evitar problemas com, pelo menos, alguns caracteres especiais:set "Build=!Build!%%x"
.set err=
(próxima linha)for /f "delims=" %%x in (err.tmp) do set "err=%err% %%x"