लॉगऑन पर कुछ चर प्रारंभ किए गए हैं और अन्य रजिस्ट्री प्रविष्टियों के साथ संग्रहीत नहीं हैं, इसलिए यदि आप ऐसे माहौल चाहते हैं जो प्रारंभिक explorer.exe वातावरण के बराबर है, तो आपको उन वस्तुओं को श्वेत-सूची करने की आवश्यकता है और उम्मीद है कि उनके पास नहीं है किसी के द्वारा बदल दिया गया:
@echo off
setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
goto main
:SetFromReg
FOR /F "tokens=2,*" %%A IN ('REG query "%~1" /v "%~2"^|find /I "REG_"') DO (
call set %~3=%%B
)
goto :EOF
:GetRegEnv
FOR /F %%A IN ('REG query "%~1" /s^|find /I "REG_"') DO (
if /I not "%%~A"=="Path" call :SetFromReg "%~1" "%%~A" "%%~A"
)
goto :EOF
:InheritOrDelete
for %%A in (save_TEMP Path SystemRoot SystemDrive ProgramFiles CommonProgramFiles ALLUSERSPROFILE COMPUTERNAME LOGONSERVER USERNAME USERDOMAIN HOMEDRIVE HOMEPATH USERPROFILE APPDATA) do if /I "%%~A"=="%~1" goto :EOF
set %~1=
goto :EOF
:main
REM Save temp
set save_TEMP=%temp%
if not defined save_TEMP set save_TEMP=%tmp%
for /F "delims==" %%A in ('set') do call :InheritOrDelete "%%~A"
call :GetRegEnv "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
call :GetRegEnv "HKCU\Environment"
REM Special handling for Path
call :SetFromReg "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" Path Path
setlocal
set u=
call :SetFromReg "HKCU\Environment" Path u
endlocal&if not "%Path%"=="" if not "%u%"=="" set Path=%Path%;%u%
REM Restore TEMP/TMP
set TEMP=%save_TEMP%
set save_TEMP=
set TMP=%TEMP%
REM start some command...
start cmd /d /k set
Reg.exe से उत्पादन हर विंडोज़ संस्करण पर ही तो आप यकीन है कि यह अपने लक्ष्य सिस्टम पर काम करता है बनाने के लिए होता है (यह भी अगर के नाम समस्याओं होगा नहीं है एक चर में एक स्थान होता है, आप इसे "tokens=2,*"
"tokens=2,* delims= "
(डेलीम्स टैब के बराबर) के साथ बदलकर ठीक कर सकते हैं, लेकिन इससे पहले कि आप यह सुनिश्चित कर लें कि reg.exe आउटपुट हमेशा विभाजक के रूप में टैब का उपयोग करता है)
आप इन मुद्दों के चारों ओर एक बैच फ़ाइल के बजाय एक खिड़कियों पटकथा मेजबान स्क्रिप्ट का उपयोग कर काम कर सकते हैं:
'orgenvshell.vbs:
Set WShl = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Function CanInherit(n)
CanInherit = False
w = Split("SystemRoot SystemDrive ProgramFiles CommonProgramFiles ALLUSERSPROFILE COMPUTERNAME LOGONSERVER USERNAME USERDOMAIN HOMEDRIVE HOMEPATH USERPROFILE APPDATA")
For Each i In w
If 0 = StrComp(i,n,1) Then
CanInherit = True
Exit Function
End If
Next
End Function
Function GetShortFolderPath(p)
GetShortFolderPath = p
On Error Resume Next
GetShortFolderPath = FSO.GetFolder(p).ShortPath
End Function
Sub E(dst,src)
set envs = WShl.Environment(src)
For Each i In envs
t = Split(i,"=")
n = t(0)
If n = "" Then n = "="&t(1)
If IsNull(dst) Then
If not CanInherit(n) Then envs.Remove n
Else
v = Mid(i,Len(n)+2)
envd = dst
If "X" = dst Then
v = WShl.ExpandEnvironmentStrings(v)
envd = src
If 0 = StrComp(n,"TMP",1) Then v = GetShortFolderPath(v)
If 0 = StrComp(n,"TEMP",1) Then v = GetShortFolderPath(v)
End If
WShl.Environment(envd)(n) = v
End If
Next
End Sub
E Null,"PROCESS"
E "PROCESS","SYSTEM"
E "PROCESS","USER"
E "X","PROCESS"
'Special hack for Path
s = WShl.Environment("SYSTEM")("Path")
u = WShl.Environment("USER")("Path")
If Len(u) Then s = s&";"&u
WShl.Environment("PROCESS")("Path") = WShl.ExpandEnvironmentStrings(s)
'Test a command
WShl.Run "cmd /d /k set ",1
आप शायद WMI क्वेरी करने और अन्य WSH तरीकों का उपयोग करके सफेद सूचीबद्ध आइटम का एक बहुत निकाल सकते ...
एक वोट है इस सवाल के बंद करने के लिए, मैं उत्सुक क्यों कर रहा हूँ। इसके बारे में क्या अनिच्छुक/योग्य है? –
जिस उपयोगकर्ता ने आपके प्रश्न को बंद करने के लिए मतदान किया है वह केवल यह सुझाव दे रहा है कि यह यहां विषय-वस्तु है और http://superuser.com/ –
पर है हाँ, यह मैं था, मैंने सोचा कि यह सुपरसियर में बेहतर होगा। स्पष्ट रूप से मुझे बाहर निकाल दिया गया है! :) –