Ce fichier de commandes libère une version de TEST à LIVE. Je souhaite ajouter une contrainte de vérification dans ce fichier qui garantit qu'il existe un document de publication d'accompagnement dans un dossier spécifique.
"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
J'ai donc quelques questions sur la façon d'y parvenir ...
Il y a un
version.txt
fichier dans le\\testserver\testapp$
dossier, et le seul contenu de ce fichier est le numéro de build (par exemple, 45 - pour la build 45) Comment lire le contenu duversion.txt
fichier dans une variable du fichier de commandes?Comment vérifier si un fichier
\\fileserver\myapp\releasedocs\ {build}.doc
,, existe en utilisant la variable de la partie 1 à la place de {build}?
la source
set
méthode ne lit qu'environ 1024 caractères, pourquoi?cmd
. C'est un langage horrible pour des scripts fiables.set /p
appellecmd!ReadBufFromInput
avec un tampon alloué par pile pour lire 1023 caractères larges (2046 octets). Il lit 1023 octets du fichier, en supposant 1 octet par caractère OEM / ANSI, mais il décode le fichier en utilisant la page de codes actuelle, qui n'est pas nécessairement OEM / ANSI. Le pire des cas est la page de codes 65001 et un fichier rempli de caractères UTF-8 de 4 octets (par exemple un ancien script). Vous obtiendrez 255 caractères, plus un caractère partiellement décodé stocké comme caractère de remplacement, U + FFFD.for /f "usebackq" %%x in ("path with spaces.txt") ...
.help for
le mentionne d'ailleurs.Vous pouvez lire plusieurs variables à partir d'un fichier comme celui-ci:
où param.txt:
la source
(param.txt)
devrait être(version.txt)
et il devrait contenirBuild=45
%%G
par%G
fais juste:
et il s'affichera comme si vous aviez tapé:
la source
Pour que toutes les lignes du fichier soient chargées dans la variable, l'expansion retardée est nécessaire, procédez comme suit:
Il y a un problème avec certains caractères spéciaux, mais surtout
;
,%
et!
la source
set
expression entre guillemets peut éviter des problèmes avec au moins certains caractères spéciaux:set "Build=!Build!%%x"
.set err=
(ligne suivante)for /f "delims=" %%x in (err.tmp) do set "err=%err% %%x"