2011-10-18 21 views

risposta

10

Ecco un modo difficile che ho fatto utilizzando il comando net e il comando find in un file batch:

set command=net user "%USERNAME%" /domain | FIND /I "Full Name" 

FOR /F "tokens=1 delims=" %%A in ('%command%') do SET fullNameText=%%A 
set fullName=%fullNameText:Full Name=% 
for /f "tokens=* delims= " %%a in ("%fullName%") do set fullName=%%a 

La prima riga memorizza il comando che vogliamo eseguire in una variabile. Estrae il nome utente dalle variabili di ambiente e lo passa nel comando net user e nel parametro /domain per dirgli di estrarre dal dominio corrente. Quindi, analizza il risultato da ciò, che è un insieme di dati sull'utente corrente, a un metodo di ricerca che estrae solo la proprietà che vogliamo. Il risultato del ritrovamento è nel formato "Nome completo John Doe". La seconda riga eseguirà il comando e inserirà il risultato nella variabile fullNameText. La terza riga rimuoverà la parte "Full Name" del risultato e finirà con "John Doe". La quarta riga con il ciclo for rimuoverà tutti gli spazi iniziali dal risultato e si finirà con "John Doe" nella variabile fullName.

+0

Possiamo trovare il nome di dominio di un computer eseguendo il seguente commnad da linea di comando. systeminfo | findstr/B/C: "Dominio" Possiamo trovare il dominio dell'utente connesso utilizzando la variabile di ambiente 'Userdomain'. Il comando per questo è indicato di seguito. echo% userdomain% – Sathish

+1

Grande! Funziona anche in PowerShell: ((utente net $ env: USERNAME/dominio | Select-String "Nome completo") -replace "Nome completo", ""). Trim() –

+0

Ho dovuto eseguire il comando% command% con invertito virgole nella seconda riga per farlo funzionare: ('"% comando%"') – elady

0

Ho creato un file batch per fare alcune cose rapidamente selezionando un'azione utilizzando set p e goto. Sto lasciando fuori le parti non necessarie.

Spero che sia d'aiuto.

+0

solo genera un loop infinito di prompt con errore: Global Switch non valido. –

4

Ecco un derivato del skeletank's risposta che è un po 'più pulito che ha funzionato per me ... (ho provato skeletank's risposta e non ha funzionato per me il modo in cui è stato scritto, così la mia risposta qui sotto.)

SET TNAME="net user %USERNAME% /domain| FIND /I "Full Name"" 
FOR /F "tokens=3,4 delims=, " %%A IN ('%TNAME%') DO SET DNAME=%%B %%A 

Quindi è possibile utilizzare "DNAME" ovunque sia necessario per uscire con un'eco o convalidare con un'istruzione "IF". Puoi girare i token '%% B' e '%% A' in giro per tornare al primo layout del cognome. Ciò consente di risparmiare lo sforzo aggiuntivo utilizzato nella risposta originale skeletank's.

Variabili:
- TNAME = nome temporaneo
- DNAME = Nome visualizzato

-Grazie skeletank.

+0

funziona come un fascino – fmuecke

1

Questo dovrebbe essere un modo pulito utilizzando dsquery e dsget senza fare affidamento sull'output di "Nome completo", che dipende dalla lingua, mentre "fn" sembra funzionare con versioni linguistiche di Windows diverse.

for /F "tokens=2" %i in ('dsquery user -samid %username% ^| dsget user -L -fn ^| find "fn:"') DO @echo %i 

L'interruttore dsget -L dà l'uscita elencato "fn: USER" così l'unica cosa rimasta è quella di afferrare la seconda colonna nell'output. find "fn:" è usato per eliminare l'output "dsget riuscito".

+0

win10 esecuzione in cmd risulta in: nome utente "') DO @echo ero inatteso in questo momento. sembra che provenga da dsquery non esistente sulla macchina –

+0

Questo è formattato per l'utilizzo dalla riga di comando. , fai riferimento alla mia risposta per la differenza tra la riga di comando e la formattazione dello script.Questo particolare comando richiede RSAT installato sul computer da cui lo hai eseguito. Il collegamento – Lectrode

0

Se lo vuoi per uso umano - il che significa che non c'è bisogno di analizzare automaticamente in modo da ottenere appena il nome completo - si può semplicemente digitare net user <username> /domain al prompt dei comandi, e leggere il "nome completo" campo .

Riferimento: Getting detailed domain user info from the command line.

+1

non funziona, e questo comando non funziona quando hai effettuato l'accesso a un altro account di dominio da quello a cui è collegato il tuo computer, in una foresta AD –

+0

@MattKerr, ho corretto il collegamento, grazie. –

1

La risposta accettata (al momento del distacco) ha 4 linee di codice, quando hai solo bisogno uno per fare la stessa cosa:

for /f "tokens=2*" %n in ('net user "%USERNAME%" /domain^|FINDSTR /C:"Full Name"') do echo "%o" 

Ciò funzionerà anche se il nome completo ha più di 2 parti . Funziona su workstation Windows "out of the box" e non richiede diritti di amministratore.

NOTA: Ricordarsi di modificare %n e %o in %%n e %%o, rispettivamente, quando si utilizza in un file batch.

Spiegazione del comando:

"tokens=2* specifica che gli unici gettoni sarà prestare attenzione sono il secondo gettone (assegnato a %n), e tutto quello che segue (assegnato alla lettera successiva: %o)

Il valore predefinito delims è lo spazio, quindi non è necessario definirlo, ma se è necessario definirlo manualmente, è il seguente: "tokens=2* delims= ". Poiché lo spazio è un delimitatore, ignorerà tutti gli spazi iniziali.

Il tubo (|) è sfuggito da una carota (^), indicando al processore di comando di ignorarlo inizialmente.

Inoltre, preferisco usare FINDSTR anziché FIND perché (nei miei test) ho trovato che è il comando più veloce, che può fare la differenza se lo si utilizza frequentemente. FINDSTR /C:"Full Name" potrebbe essere facilmente sostituito con FIND "Full Name" se si preferisce.

+0

win10 cmd esecuzione in un risultato .bat in: USERNAME "Nome completo" ') era inatteso in questo momento. –

+0

non funziona se l'utente si trova su un dominio diverso da quello a cui sono attualmente connessi (ma ancora nella foresta AD w/trust), La richiesta verrà elaborata su un controller di dominio per il dominio XXX.XXX.XXX. Impossibile trovare il nome utente. Ulteriori informazioni sono disponibili digitando NET HELPMSG 2221. –

+0

OP domanda per il comando "Dal prompt dei comandi". La mia risposta è formattata come tale. Tuttavia, dichiaro specificamente come formattare per lo script .bat se vuoi usarlo per quello. Si prega di consultare la "NOTA". – Lectrode

1

Lectrode answer in one string will be like this:

for /f "usebackq tokens=2,* delims= " %%a in (`net user "%USERNAME%" /domain ^| find /i "Full Name"`) do set FULLNAME=%%b 
+0

Si noti che questo è formattato per script bat o cmd. Questo non funzionerà "Dal prompt dei comandi" come richiesto dall'OP sopra – Lectrode

+0

'' 'for/f" usebackq tokens = 2, * delims = "% a in (' net user "% USERNAME%"/domain^| find/i " Nome completo "') imposta FULLNAME =% b''' /// Basta cambiare il doppio %% in% e funzionerà da CMD /// – kgimpel

Problemi correlati