Este archivo por lotes libera una compilación de TEST a LIVE. Quiero agregar una restricción de verificación en este archivo que garantice que haya un documento de publicación adjunto en una carpeta 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
Así que tengo un par de preguntas sobre cómo lograr esto ...
Hay un
version.txt
archivo en la\\testserver\testapp$
carpeta, y el único contenido de este archivo es el número de compilación (por ejemplo, 45 - para la compilación 45) ¿Cómo leo el contenido delversion.txt
archivo en una variable en el archivo por lotes?¿Cómo verifico si
\\fileserver\myapp\releasedocs\ {build}.doc
existe un archivo, usando la variable de la parte 1 en lugar de {build}?
fuente
set
método solo lee unos 1024 caracteres, ¿por qué?cmd
. Es un lenguaje horrible para guiones confiables.set /p
llamacmd!ReadBufFromInput
con un búfer asignado en la pila para leer 1023 caracteres de ancho (2046 bytes). Lee 1023 bytes del archivo, suponiendo 1 byte por carácter OEM / ANSI, pero decodifica el archivo utilizando la página de códigos actual, que no es necesariamente OEM / ANSI. El peor de los casos es la página de códigos 65001 y un archivo lleno de caracteres UTF-8 de 4 bytes (por ejemplo, un script antiguo). Obtendrá 255 caracteres, más un carácter parcialmente decodificado almacenado como el personaje de reemplazo, U + FFFD.for /f "usebackq" %%x in ("path with spaces.txt") ...
.help for
menciona esto, por cierto.Puede leer múltiples variables de un archivo como este:
donde param.txt:
fuente
(param.txt)
debería ser(version.txt)
y debería contenerBuild=45
%%G
con%G
solo haz:
y se mostrará como si escribiera:
fuente
Para que todas las líneas del archivo se carguen en la variable, se necesita la expansión retardada, así que haga lo siguiente:
Hay un problema con algunos caracteres especiales, aunque especialmente
;
,%
y!
fuente
set
expresión entre comillas dobles podría evitar problemas con al menos algunos caracteres especiales:set "Build=!Build!%%x"
.set err=
(siguiente línea)for /f "delims=" %%x in (err.tmp) do set "err=%err% %%x"