PDA

View Full Version : batch variabile numerica indefinita eliminazione


giacxyz
26-10-2017, 18:51
Buongiorno,
sono nuovo del forum e spero di avere inserito il problema nel forum corretto.

Sto lavorando ad un batch con sistema win xp pro sp3.

Ho provato a cercare in rete per il mio problema ma le risposte non sono soddisfacenti.

In molti forum si dice che per effettuare una delete di una variabile esistente e già valorizzata sia sufficiente scrivere set /a var=

Il problema sorge quando, vedi il codice più sotto, provo a testare l'annullamento della variabile, la risposta del sistema è che la variabile è ancora valorizzata e questo:

(a) sia quando effettuo il test con un echo
(b) sia quando provo a reindirizzare il comando set su un file

(1) Da <echo [01]> mi aspetterei un <null> oppure <undefine> o q.sa di simile.
(2) Da <set z > C:\WINDOWS\system32\zCONTAINER_0*.txt> mi aspetterei un file vuoto

Idem se eseguo il codice con setlocal enabledelayedexpansion ... endlocal,
unica differenza, chiaramente, è che essendo la variabile locale il comando set da console risponde con: Variabile di ambiente z non definita, ma i due file creati dalla redirezione sono entrambi valorizzati.

La cosa strana è che, con lo stesso codice, ma dichiarando una variabile letterale <set zVarNum=aaa> anzichè una numerica, tutto è corretto.

Grazie anticipatamente.

:--------------------------------------------------------con variabile numerica
@echo off
set /a zVarNum=1
echo [00]: %zVarNum%
set z > C:\WINDOWS\system32\zCONTAINER_00.txt
set /a zVarNum=
echo [01]: %zVarNum%
set z > C:\WINDOWS\system32\zCONTAINER_01.txt
@echo on

OUTPUT CONSOLE:
C:\WINDOWS\system32>ztest00.bat
[00]: 1
Operando mancante.
[01]: 1
C:\WINDOWS\system32>

OUTPUT COMANDO SET SU CONSOLE (post esecuzione):
C:\WINDOWS\system32>set z
zVarNum=1
C:\WINDOWS\system32>

OUTPUT DI: set z > C:\WINDOWS\system32\zCONTAINER_00.txt |---|> File creato e valorizzato con: zVarNum=1
OUTPUT DI: set z > C:\WINDOWS\system32\zCONTAINER_01.txt |---|> File creato e valorizzato con: zVarNum=1



:--------------------------------------------------------con variabile letterale
@echo off
set zVarNum=aaa
echo [00]: %zVarNum%
set z > C:\WINDOWS\system32\zCONTAINER_00.txt
set zVarNum=
echo [01]: %zVarNum%
set z > C:\WINDOWS\system32\zCONTAINER_01.txt
@echo on


OUTPUT CONSOLE:
C:\WINDOWS\system32>ztest00.bat
[00]: aaa
[01]:
Variabile di ambiente z non definita
C:\WINDOWS\system32>


OUTPUT COMANDO SET SU CONSOLE:
C:\WINDOWS\system32>set z
Variabile di ambiente z non definita
C:\WINDOWS\system32>

OUTPUT DI: set z > C:\WINDOWS\system32\zCONTAINER_00.txt |---|> File creato e valorizzato con: zVarNum=aaa
OUTPUT DI: set z > C:\WINDOWS\system32\zCONTAINER_01.txt |---|> File creato e non valorizzato

x_Master_x
29-10-2017, 15:08
@ECHO OFF
SET /a zVarNum=1
ECHO [00]: %zVarNum%
ECHO > "C:\zCONTAINER_0%zVarNum%.txt"
SET zVarNum=
ECHO [01]: %zVarNum%
ECHO > "C:\zCONTAINER_0%zVarNum%.txt"
PAUSE

giacxyz
30-10-2017, 13:42
Grazie per la risposta, ormai temevo di non trovare un help per il mio problema,
non capisco però il rapporto tra lo stato di attivazione\disattivazione del comando ECHO e il problema postato,
se eseguo lo stesso script modificando da @ECHO OFF a @ECHO ON il risultato è cmq. lo stesso.

Se può servire, aggiungo che ho provato anche con if defined … ma il risultato non cambia,
vedere la riga di output [08]…
Insomma la riga set /a zzNum=
non ha nessun effetto mentre la “deassegnazione”
set zzStr=
produce l’effetto desiderato vedi output [11]…

@echo off
setlocal enabledelayedexpansion
set /a zzNum=
set zzStr=
if defined zzNum (echo [00]zzNum IS defined) ELSE (echo [01]zzNum is NOT defined)
if defined zzStr (echo [02]zzStr IS defined) ELSE (echo [03]zzStr is NOT defined)
set /a zzNum=3
set zzStr=pippo
if defined zzNum (echo [04]zzNum IS defined) ELSE (echo [05]zzNum is NOT defined)
if defined zzStr (echo [06]zzStr IS defined) ELSE (echo [07]zzStr is NOT defined)
set /a zzNum=
set zzStr=
if defined zzNum (echo [08]zzNum IS defined) ELSE (echo [09]zzNum is NOT defined)
if defined zzStr (echo [10]zzStr IS defined) ELSE (echo [11]zzStr is NOT defined)
endlocal
@echo on

OUTPUT CONSOLE:

C:\Documents and Settings\giac>zztest02.bat
Operando mancante.
[01]zzNum is NOT defined
[03]zzStr is NOT defined
[04]zzNum IS defined
[06]zzStr IS defined
Operando mancante.
[08]zzNum IS defined
[11]zzStr is NOT defined
C:\Documents and Settings\giac>