如何更改Windows的USERNAME环境变量字符串?

4
我经过一整天的努力,仍然在寻找解决方案。简而言之,我的困境似乎很简单。根据我在Google和Stackoverflow上的搜索结果,一个有效的解决方案并不容易。
引用块: 编辑:我需要澄清使用情况。我们可能有6个用户需要运行某些脚本,这些脚本使用“%USERNAME%”字符串来登录到区分大小写的环境、Linux、MySQL等。其中一个用户名是混合大小写的。在我使用我的名字“Will”作为示例时,它必须是“will”(全部小写)。 尽管如此,总的问题是当“%USERNAME%”环境变量值输入错误时,如何更改它?
目前我在Windows 7 Professional下的用户名是“will”,但是环境变量却有这个值:
echo.  User = %USERNAME%
  User = Will

我需要它呈现为:

  User = will
rem      * All lower-case

为了清楚明白...

我想要更改Windows在我的登录时设置的USERNAME环境变量的(源)值。

我认为改变那个字符串的设置或配置选项应该很容易找到--直到我尝试过后。根据与cygwin等相关的问题,我认为这可能经常发生。

问题如下:

这也困扰着我,因为这是一个在登录环境中基本的东西,却需要一个混乱的脚本来“修复”它。

我还在办公室进行了快速调查。有些人是混合大小写,一两个人是小写。这似乎是任意的,取决于创建账户时输入的内容或其他因素。

我们的管理员在域上查看了我的账户(不是活动目录),和我的登录屏幕上显示的一样,都是小写的“will”。

最后,我进行了几次实验。 我在用户控制面板中更改了我的用户名。

from:  "will" to "xxwill"

我认为这将会更新我的USERNAME字符串。我退出了。我再次尝试并重新启动了一次。结果非常惊人(或者也许不应该出现):

  User = Will
rem      * NO change for the "xxwill" name-change!

进一步补充一些内容。我创建了一个名为“dodo”的帐户和一个名为“Dogdo”的帐户,分别将用户名更改为“Dodo”和“dogdo”。

  User = dodo
  User = Dogdo
rem      * NO change for name-changes!

我发现无法以那种方式更改USERNAME。 我无法在高级选项中编辑系统环境变量。 它可能在配置文件中。但是,您能否只使用管理员权限编辑配置文件甚至查看其中的内容? 我还不知道; 我也不确定这是我的首选路线,因为这涉及从某个原始设置中进行一些“输出”的黑客行为。
我希望有人能帮助我澄清这一点,这样我就不需要脚本解决方案了。
3个回答

5
如果您想更改Windows的USERNAME环境变量字符串,可以在“高级用户帐户”控制面板中进行更改。
通过运行netplwiz(“C:\ Windows \ System32 \ Netplwiz.exe”,网络位置向导)打开它。 然后选择要更改的名称,单击“属性”按钮。 现在您可以获取所选用户帐户的属性:您可以在此更改用户名(,全名和描述)。 只需要管理员权限即可完成此操作。
注销并登录,打开命令提示符,尝试输出%USERNAME%的值。 您会注意到它已根据您的修改进行了更改。

非常感谢,你的回答真的救了我的一天! - undefined

1
@ECHO OFF
SETLOCAL
PUSHD "%temp%"
COPY NUL "%username%" >NUL 2>NUL
FOR /f "delims=" %%a IN ('dir /L /b "%username%"') DO set "usernamelc=%%a"
del "%username%" >NUL 2>NUL
POPD
ECHO %USERNAME% --^> %usernamelc%
GOTO :EOF

也许这可以帮助。结果因人而异。

1
我希望不需要操纵这个值。我认为Windows应该将USERNAME设置为我登录时使用的名称。由于它不会这样做,我需要显式地更改它。如果可能的话。 - will
如果您愿意,可以直接设置“用户名”而不是“usernamelc”,但这样的设置仅对当前的“cmd”实例有效。在每个实例创建时重新建立其他实例,但将其设置为用户变量会覆盖系统设置(在该“cmd”实例中)。 - Magoo
1
我认为可能存在误解。在您的Windows PC上创建一个用户名为“Fred”的账户,然后将登录用户的名称更改为(例如)“Malcom”。现在用户名是“Malcom”。当您以_Malcom_身份登录并打印echo %USERNAME%时,输出应该是“Fred”(永远如此)。我想知道如何修改在登录期间加载到USERNAME中的字符串。 - will
我不会玩弄用户账户,因为我的系统只有我使用,而且我不在公司环境中。考虑更改用户名的后果。例如,如果你今天是“超人”,明天是“蝙蝠侠”,那么系统应该如何跟踪这些更改以适用于网络、本地、云或离线设备的文件所有权和访问权限?与此相比,从深层目录传播目录更改日期/时间(Windows不支持)将变得轻松得多... 登录名不一定等于账户名似乎是正确的。 - Magoo

0

我认为没有办法完全做到你所说的,但这可能是可以实现的,你可以通过调整定义用户名的位置来了解。

• 首先,有用户文件夹C:\user\username1,在用户创建时定义。这可以(我想)更改(我只看到了参考资料,但有很多参考资料,这很容易找到)。

• 其次,有控制面板>用户帐户>更改我的名称。这似乎与您的$env:USERNAME相关。

• 最后,有lusrmgr.msc>用户。这与您的“真实”用户名最密切相关,并与[Security.Principal.WindowsIdentity] :: GetCurrent()对齐。 我说“真实”,因为最近我发现当尝试使用ssh-keygen创建公钥时,我的显示名称和$env:USERNAME设置为“Name1”,但ssh-keygen只能看到“Name2”,我不得不在lusrmgr.msc中更改名称以修复此问题(需要重新启动)。

这是一篇旧帖子,但是我发表它是为了帮助那些有类似问题的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接