2009-10-22 12 views
111

कमांड लाइन स्क्रिप्ट चलाते समय, क्या वर्तमान उपयोगकर्ता का नाम प्राप्त करना संभव है? ओएस विंडोज एक्सपी है। %USERNAME%आप वर्तमान उपयोगकर्ता को विंडोज वातावरण में कैसे ढूंढते हैं?

+0

(नेट से) संबंधित: * (http://stackoverflow.com/questions/ [मैं कैसे सी # का उपयोग कर .NET में वर्तमान उपयोगकर्ता नाम मिलता है?] 1240373) * –

उत्तर

144

आप इस उपयोगकर्ता नाम चर का उपयोग कर सकते हैं। जाहिर है इसे आसानी से धोखा दिया जा सकता है, इसलिए सुरक्षा के लिए इस पर भरोसा न करें।

उपयोगी युक्ति: कमांड प्रॉम्प्ट में set टाइप करें सभी पर्यावरण चर सूचीबद्ध करेंगे।

+2

परिवर्तनीय नाम प्रतिशत चिह्न के बिना है। कमांड प्रॉम्प्ट में केवल प्रतिशत संकेत की आवश्यकता है। – kurast

42

यह %USERNAME% में होना चाहिए:

+1

आपकी 'नेट कॉन्फ़िगरेशन वर्कस्टेशन | "उपयोगकर्ता नाम" ढूंढें टिप्पणी बहुत उपयोगी है। यह सिर्फ – Alpay

66

प्रयोक्ता नाम:

echo %USERNAME% 

Domainname:

echo %USERDOMAIN% 

आप कमांड प्रॉम्प्ट से आदेश set चलाकर वातावरण चर की एक पूरी सूची प्राप्त कर सकते हैं।

3

यह हमेशा मुझे नाराज है कैसे विंडोज ऐसे who/whoami, sed और AWK के रूप में यूनिक्स के और अधिक उपयोगी थोड़ा पटकथा उपयोगिताओं के कुछ नहीं है,। वैसे भी, अगर आप कुछ सरल चाहते हैं, विजुअल स्टूडियो एक्सप्रेस मिलता है और निम्नलिखित संकलन:

#include <windows.h> 
#include <stdio.h> 

int main(int argc, char **argv) { 
    printf("%s", GetUserName()); 
} 

और बस का उपयोग करने वाले अपने बैच फ़ाइल में।

+0

हाँ की बजाय एक उत्तर होना चाहिए था, हाँ, यह अंतर्निहित होना अच्छा लगेगा। – Geo

+8

मैं मानता हूं कि sed & awk उपयोगी होगा, लेकिन यह आपको 50% तरीके से प्राप्त करता है: 'नेट कॉन्फ़िगरेशन वर्कस्टेशन | Windows Vista के साथ "उपयोगकर्ता नाम" ' –

+9

'व्हामीमी' उपलब्ध है। – Joey

3

% USERNAME% आपको वर्तमान में चल रही प्रक्रिया का उपयोगकर्ता नाम प्राप्त करेगा। इस पर निर्भर करते हुए कि आप अपनी बैच फ़ाइल कैसे चला रहे हैं, यह वर्तमान उपयोगकर्ता के नाम के समान नहीं है। उदाहरण के लिए, हो सकता है कि आप एक निर्धारित कार्य के माध्यम से, एक सेवा से, आदि के माध्यम से अपनी बैच फ़ाइल चला रहे हों।

यहां शुरू किए गए उपयोगकर्ता के नाम को स्क्रैप करके वर्तमान में लॉग ऑन उपयोगकर्ता का उपयोगकर्ता नाम प्राप्त करने का एक और निश्चित तरीका यहां दिया गया है explorer.exe कार्य:

for /f "TOKENS=1,2,*" %%a in ('tasklist /FI "IMAGENAME eq explorer.exe" /FO LIST /V') do if /i "%%a %%b"=="User Name:" set _currdomain_user=%%c 
for /f "TOKENS=1,2 DELIMS=\" %%a in ("%_currdomain_user%") do set _currdomain=%%a & set _curruser=%%b 
2

मैं परीक्षण के लिए बैच फ़ाइलों को लिखने में इस विधि का उपयोग करता हूं।

echo %userdomain%\%username% 

जब से तुम सादे पाठ में पासवर्ड को शामिल करना चाहिए अगर प्रमाणीकरण की आवश्यकता है, मैं सिर्फ यह एक पूरी तरह निजी वातावरण जहां अन्य उपयोगकर्ता उसे नहीं देख सकते हैं या एक उपयोगकर्ता पासवर्ड को देखकर कोई परिणाम भुगतने होगा अगर में प्रयोग करेंगे।

उम्मीद है कि यह किसी की मदद करेगा।

0

एक मानक संदर्भ में, प्रत्येक कनेक्टेड उपयोगकर्ता में explorer.exe प्रक्रिया होती है: कमांड [कार्यसूची/वी | ढूंढें "एक्सप्लोरर"] एक पंक्ति देता है जिसमें explorer.exe प्रक्रिया स्वामी है, एक अनुकूलित रेगेक्स के साथ यह संभव है आवश्यक मूल्य प्राप्त करने के लिए। यह विंडोज   के तहत पूरी तरह से चलता है 7.

दुर्लभ मामलों में explorer.exe को किसी अन्य प्रोग्राम द्वारा प्रतिस्थापित किया जाता है, तो इस फ़िल्टर से मेल खाने के लिए खोज फ़िल्टर को अनुकूलित किया जा सकता है। यदि आदेश एक खाली रेखा लौटाता है तो संभवतः कोई उपयोगकर्ता लॉग ऑन नहीं होता है। विंडोज   7 के साथ [क्वेरी सत्र | ढूंढें ">"] चलाने के लिए भी संभव है।

46

बस कमांड प्रॉम्प्ट में इस आदेश का उपयोग करें:

C:\> whoami 
13

%USERNAME% बैच में सही जवाब और Windows वातावरण में अन्य है।

एक अन्य विकल्प %USERPROFILE% उपयोग करने के लिए C:\Users\username की तरह, उपयोगकर्ता के पथ प्राप्त करने के लिए है।

0

जहां तक ​​ब्लूबियरर सबसे अच्छा प्रतिक्रिया देता है (जबकि मैं अपनी बैच स्क्रिप्ट को उदाहरण के साथ सिस्टम सिस्टम अधिकारों के साथ चला रहा हूं) मुझे इसमें कुछ जोड़ना है। क्योंकि मेरे विंडोज़ भाषा संस्करण (पोलिश) लाइन में "%%%% बी" == "उपयोगकर्ता नाम:" द्वारा कैच किया जाना है, वास्तव में अनुपालन किया जाता है (इसमें मेरी भाषा में कुछ विशिष्ट वर्ण शामिल हैं) मैं पहली 7 लाइनों को छोड़ देता हूं और 8 वीं पर काम करते हैं।

@for /f "SKIP= 7 TOKENS=3,4 DELIMS=\ " %%G in ('tasklist /FI "IMAGENAME eq explorer.exe" /FO LIST /V') do @IF %%G==%COMPUTERNAME% set _currdomain_user=%%H 
2

ज्यादातर मामलों में,% USERNAME% चर आप जो चाहते हैं वह होगा।

echo %USERNAME% 

हालांकि, अगर आप एक ऊंचा cmd खोल चला रहे हैं, तो% USERNAME% अपने खुद के उपयोगकर्ता नाम के बजाय व्यवस्थापक नाम रिपोर्ट करेंगे। यदि आप बाद में जानना चाहते हैं, चलाएँ:

for /f "tokens=2" %u in ('query session ^| findstr /R "^>"') do @echo %u 
संबंधित मुद्दे