A volte è utile archiviare un file batch se è stato avviato da un prompt dei comandi con privilegi elevati o come amministratore. Vorrei condividere con voi un trucco che sto usando per farlo. L'idea principale del mio trucco si basa sul valore della variabile di ambiente speciale% errorlevel% che memorizza il codice di uscita per la maggior parte delle app e dei comandi della console. Vediamolo in azione.
Pubblicità
Quando alcune app della console terminano correttamente il proprio lavoro, la variabile% errrorlevel% memorizza 0 come valore.
Apri una nuova istanza del prompt dei comandi ed esegui il comando 'dir'. Successivamente, stampa il valore% errorlevel% utilizzando il comando 'echo':
dir echo% errorlevel%
Produrrà 0 come output.
Ora, proviamo a eseguire un comando che richiede l'elevazione, da una normale finestra del prompt dei comandi non elevata. Ad esempio, proviamo il file openfiles comando che richiede diritti di amministratore.
Se si stampa il valore% errorlevel%, non sarà 0 perché il comando openfiles non riuscirà a mostrare i file aperti senza i diritti di amministratore.
Tuttavia, se lo esegui da un prompt dei comandi con privilegi elevati ( ecco come aprire un prompt cmd dell'amministratore ), mostrerà i file aperti e restituirà 0, come previsto.
Utilizzando questa funzionalità, è possibile implementare un semplice controllo nel file batch:
@echo off openfiles> NUL 2> & 1 if NOT% ERRORLEVEL% EQU 0 goto NotAdmin echo Ciao dal prompt dei comandi con privilegi elevati goto End: NotAdmin echo Questo prompt dei comandi NON è ELEVATO: End
Si noti che utilizzo il reindirizzamento dell'output per sopprimere qualsiasi output dal comando openfiles. Nella parte '> NUL 2> & 1', l'output predefinito del comando viene reindirizzato a nulla (NUL) e l'output dell'errore viene reindirizzato allo standard output, ovvero anche a NUL.
Invece del comando openfiles, puoi usare qualsiasi comando che richiede elevazione, ad esempio, il sessione netta comando.
Questo è tutto.