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.txtarchivo 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.txtarchivo en una variable en el archivo por lotes?¿Cómo verifico si
\\fileserver\myapp\releasedocs\ {build}.docexiste un archivo, usando la variable de la parte 1 en lugar de {build}?
fuente

setmétodo solo lee unos 1024 caracteres, ¿por qué?cmd. Es un lenguaje horrible para guiones confiables.set /pllamacmd!ReadBufFromInputcon 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 formenciona 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%%Gcon%Gsolo 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
setexpresió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"