web-dev-qa-db-fra.com

Comment lire le contenu du fichier dans une variable d'un fichier de commandes?

Ce fichier de commandes publie une version de TEST vers LIVE. Je souhaite ajouter une contrainte de vérification dans ce fichier afin de garantir la présence d'un document de version correspondant 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 de réaliser cela ...

  1. Il y a un fichier version.txt dans le dossier \\testserver\testapp$ et le seul contenu de ce fichier est le numéro de version (par exemple, 45 - pour la version 45). Comment lire le contenu du fichier version.txt fichier dans une variable du fichier de commandes?

  2. Comment vérifier si un fichier, \\fileserver\myapp\releasedocs\ {build}.doc, existe à l'aide de la variable de la partie 1 à la place de {build}?

137
user23048345

Lire le contenu du fichier dans une variable:

for /f "delims=" %%x in (version.txt) do set Build=%%x

ou

set /p Build=<version.txt

Les deux agissent de la même manière avec une seule ligne dans le fichier. Pour plusieurs lignes, la variante for mettra la ligne last dans la variable, tandis que set /p utilisera le signe - premier.

Utiliser la variable - comme toute autre variable d’environnement - c’est un, après tout:

%Build%

Donc, pour vérifier l'existence:

if exist \\fileserver\myapp\releasedocs\%Build%.doc ...

Bien qu'il soit possible qu'aucun chemin UNC n'y soit autorisé. Je ne peux pas tester cela maintenant, mais gardez cela à l'esprit.

261
Joey

Vous pouvez lire plusieurs variables d'un fichier comme ceci:

for /f "delims== tokens=1,2" %%G in (param.txt) do set %%G=%%H

où param.txt:

PARAM1=value1
PARAM2=value2
...
39
xnagyg

il suffit de faire:

type version.txt

et il sera affiché comme si vous aviez tapé:

set /p Build=<version.txt
echo %Build%
27
psrcek

Pour que toutes les lignes du fichier soient chargées dans la variable, une extension retardée est nécessaire. Procédez comme suit:

SETLOCAL EnableDelayedExpansion

for /f "Tokens=* Delims=" %%x in (version.txt) do set Build=!Build!%%x

Il y a un problème avec certains caractères spéciaux, mais en particulier ;, % et !

19
DPS