|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Oct 2017
Messaggi: 2
|
batch variabile numerica indefinita eliminazione
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 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2005
Messaggi: 8694
|
Codice:
@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
__________________
. Thread Ufficiali: EasyCrypt ~ Old Files Manager ~ OSD Clock The real me is no match for the legend . |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Oct 2017
Messaggi: 2
|
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> Ultima modifica di giacxyz : 31-10-2017 alle 16:14. Motivo: precisazione |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:54.