【问题标题】:How can I change the windows USERNAME environment variable string?如何更改 windows USERNAME 环境变量字符串?
【发布时间】:2016-07-25 12:01:30
【问题描述】:

在挣扎了一天的大部分时间后,我正在寻找解决方案。简而言之,我的困境似乎很简单。根据 Google 和 Stackoverflowhits,我似乎很难找到一个有效的解决方案。

(EDIT)
我需要澄清用例。我们可能有 6 个用户需要运行某些使用“%USERNAME%”字符串登录到区分大小写的环境、Linux、MySQL 等的脚本。一个用户名是 mixed-case。在示例中,我使用我的名字:“Will”作为脚本,它必须是:“will”(全部小写)。

  • 一般的问题是,当 %USERNAME% 环境变量的值输入错误时,如何更改它?

目前我的 Windows 7 Professional 用户名是“will”,但环境变量有这个值:

echo.  User = %USERNAME%
  User = Will

我需要它作为:

  User = will
rem      * All lower-case

要明确...

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

我认为找到更改该字符串的设置或配置选项会容易 -- 直到我尝试过。从与 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。我无法在高级选项中编辑系统环境变量。它可能在配置文件中。但是,您可以仅使用管理员权限编辑配置文件,甚至查看其内部吗?我还不知道;我也不确定这是否是我的首选路线,因为它正在使用一些原始设置的“输出”进行黑客攻击,somewhere

我希望有人可以让我直截了当,所以我不需要那个脚本解决方案。

【问题讨论】:

    标签: windows cmd environment-variables


    【解决方案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
    

    也许这可能会有所帮助。 YMMV。

    【讨论】:

    • 我不想操纵这个值。我认为 Windows 应该将 USERNAME 设置为我登录时使用的名称。因为它不会我需要明确地改变它。如果可能的话。
    • 如果需要,您可以直接设置username 而不是usernamelc,但这样的设置只对当前的cmd 实例有效。在创建每个实例时为其他实例重新建立它,但将其设置为用户变量会覆盖系统设置(在该 cmd 实例中)
    • 我觉得肯定有误会。在您的 Windows PC 上创建一个用户名“Fred”。然后将登录用户的名称更改为(比如说):“Malcom”。所以现在用户名是“Malcom”。当您以 Malcom 身份登录时 -- 并打印 echo %USERNAME% ... 输出应为“Fred”(永远如此)。我想知道,如何在登录期间修改 loaded-in-to ... USERNAME 的字符串。
    • 我不玩用户帐户,因为我的系统仅供我使用,而且我不在公司环境中。想想更改用户名的后果。例如,您将如何处理文件的所有权和访问权限 - 如果您今天是“超人”,明天是“蝙蝠侠”,系统应该如何跟踪网络、本地、云或离线设备的这些更改?与那个噩梦相比,将目录更改日期/时间从深层目录传播到根目录(Windows 不会这样做)将是一件轻而易举的事……登录名不一定 = 帐户名显示为真。
    【解决方案2】:

    我认为没有办法完全按照您所说的进行操作,但它可能是可以实现的,您可以通过使用定义用户名的位置来了解。

    • 首先,用户文件夹C:\user\username1 是在用户创建时定义的。这(我认为)可以更改(我只看到了对它的引用,但是有很多引用,这很容易找到)。

    • 其次,有Control Panel > User Accounts > Change My Name。这似乎与您的 $env:USERNAME

    相关

    • 最后是lusrmgr.msc > Users。这与您的“真实”用户名最密切相关,并且与 [Security.Principal.WindowsIdentity]::GetCurrent() 一致 我说“真实”是因为我最近在尝试使用 ssh-keygen 创建公钥时发现了这一点,尽管我的显示名称和 $env:USERNAME 设置为“Name1”,ssh-keygen 只会看到“Name2”而我必须更改 lusrmgr.msc 中的名称才能解决此问题(需要重新启动)。

    这是一个旧帖子,但发布以防万一这可以帮助任何有类似问题的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-21
      • 2019-04-24
      • 2012-04-19
      • 1970-01-01
      • 2014-08-16
      • 2012-08-09
      • 1970-01-01
      • 2021-05-06
      相关资源
      最近更新 更多