Windows Lot Variables ne
Je pense que je suis tombé sur un bug dans la Fenêtre lot de script.
Je ne peux pas définir des variables qui sont dans une instruction if.
Ici est une partie isolée de mon script:
@echo off
set success=1
set Version=12345
set Target=Client
set Type=456
set dir=
set zip=
if "%Version%"=="" set success=0
if "%Type%"=="" set success=0
if 1==1 set test=42
if %success%==1 (
set test2=57005
if "%Target%"=="Client" (
set dir=ModName v%Version%
set zip=ModName v%Version% %Type%.zip
echo Version: %Version%
echo Type: %Type%
echo.
echo Target: %Target%
echo dir: %dir%
echo zip: %zip%
echo.
echo test: %test%
echo test2: %test2%
)
) else (
echo Not successful.
)
C'est la sortie d'une toute nouvelle instance de cmd:
C:\Users\RandomClown\Desktop>test.bat
Version: 12345
Type: 456
Target: Client
dir:
zip:
test: 42
test2:
Ce que vous devriez remarquer, c'est que la seule ligne si la déclaration définit correctement choses.
Le multiligne si vous effectuez tout ce qui n'est PAS un ensemble. Je ne pense pas que j'ai raté quelque chose.
Aussi, le multiligne si la déclaration est correctement exécution de la droite des lignes, comme le else ( echo Not successful. )
lignes ne s'est pas exécuté.
Pourquoi les lignes à ne pas exécuter?
- wow, c'était une réponse rapide. En regardant maintenant.
- Double Possible de windows lot DÉFINI à l'intérieur SI vous ne travaillez pas
- Nous avons besoin de mettre cette question dans l'en-tête de
batch-file
.
Vous devez vous connecter pour publier un commentaire.
Vous avez raté quelque chose 😉
cmd
élargit variables lorsque les commandes sont analysé, pas quand ils sont exécutés. Il arrive que l'unif
oufor
déclaration avec un bloc de( ... )
(ou en fait n'importe quel bloc) counds en une seule commande dans ce cas. Ainsi, lorsque vous définissez des variables à l'intérieur d'un bloc et essayez de les utiliser dans le même bloc, il n'y a pas de variables plus – ils ont été remplacés par les valeurs des variables a avant le bloc de même exécuté.Coller une
au début de votre fichier de commandes et l'utilisation
!zip!
au lieu de%zip%
. Voirhelp set
pour une discussion détaillée du problème.Juste rappeler, le ms-dos commande "set" prend chaque chaîne de caractères après le signe égal. Donc si vous écrivez
Le %a% est en fait du "foo d'autre mis a=bar", pas de foo.
J'ai donc toujours utiliser "()" pour l'ensemble de la commande si il y a plusieurs commandes sur une seule ligne.