Affectation de Variable de problème de DOS fichier de commandes pour la boucle
J'ai une affectation de variable problème à l'intérieur du DOS de script pour la boucle. Il n'a jamais assigne la valeur, il est toujours vide. Ci-dessous l'exemple de code
@echo off
set ans=%1
SET STRING=%ans:"=%
echo Parsing the string "%STRING%":
for /f "tokens=1-2" %%a in ("%STRING%") do (
set Word1 =%%a
echo Word 1: %%a
echo Word 1: %Word1%
set Word2 =%%b
if %%b.==. (Set server =\\.\pipe\mssql$microsoft##ssee\sql\query ) else (Set server =%%b)
)
echo Server name "%server%"
sqlcmd -s %server%
valeur de %de %de un n'est pas affectée à une variable Word1. Mais quand je l'echo %%a, il affiche la bonne valeur. Ainsi dans la dernière valeur vide de vérifier si la condition, la variable serveur jamais définie. Je suis très confus ici. quelqu'un peut-il m'aider??
P. S: d'entrée pour le script est en 2 mot de la chaîne (ex: un.chauve-souris "l dev-serveur")
OriginalL'auteur RameshVel | 2010-09-06
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser expansion retardée -
!Word1!
au lieu de%Word1%
.Par défaut, lorsque le shell lit d'abord la déclaration, toutes les variables sont remplacées par leurs valeurs actuelles, et la déclaration modifiée est utilisée chaque fois que la ligne est touché. C'est tout simplement la façon dont DOS fonctionne, et c'est rester dans le shell de Windows pour des raisons de compatibilité ascendante.
Expansion retardée, d'autre part, réinsère la valeur chaque fois que l'instruction est touché. Cela vous donnera le résultat souhaité.
merci Diego pour plus d'info.
OriginalL'auteur Michael Madsen