如何从命令提示符标题中删除“管理员:”

如何从命令提示符标题中删除“管理员:”

在 Windows Vista 中,有没有办法从命令提示符窗口的标题中删除“管理员:”字样?

'title' 命令仅更新“Administrator:”之后的部分,所以这样做不行。

答案1

这里还有另外两种可能性:

  • 使用 Windows XP 中的 cmd.exe
  • 修改cmd.exe的MUI数据:

您需要修改 cmd.exe 的 MUI 数据文件。此文件名为 cmd.exe.mui,位于标准 32 位美国安装中的 C:\Windows\System32\en-US。对于其他语言,en-US 会有所不同,对于 64 位安装,您需要同时修改 System32 和 SysWOW64 中的版本。

  • 首先,获取 cmd.exe.mui 的所有权。右键单击该文件,单击安全选项卡上的“高级”。在所有者选项卡上,单击编辑,然后选择管理员帐户。

  • 现在,授予修改文件的权限。返回文件属性,单击“安全”选项卡上的“编辑”,单击“添加”,输入管理员,然后确保他们将“完全控制”选项设置为“允许”。

  • 使用十六进制编辑器、资源编辑器或您选择的其他编辑器,将文件中的字符串从“Administrator:%0”修改为“%0”(%0 之前有两个空格,不要忘记末尾的空字符)。

  • 保存文件

  • 运行 mcbuilder.exe(这可能需要一些时间)

  • 重新启动计算机。

(从此主题- 注意,您可以使用空格,但它必须是某个东西。)

答案2

runas /trustlevel:0x20000 "cmd /k title My Awesome Command Prompt"

答案3

虽然事实证明它不能解决此错误中的问题,但并不是每个人都知道你可以使用标题命令并将标题设置为您想要的任何内容。

答案4

我刚刚创建了一个简单的 PowerShell 脚本,该脚本依赖于运行时编译的 .NET 类来自动执行 @crb 答案中解释的步骤。

该解决方案适用于cmd.exe.mui文件的英语和西班牙语版本,并且我只需向对象添加新条目即可轻松添加对更多语言的支持dict

享受!。

源代码

$source = @'
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Collections.ObjectModel
imports System.Diagnostics
Imports System.IO
imports System.Linq
Imports System.Text

Public NotInheritable Class MainClass

    Public Shared Sub Main()
        Dim dict As New Dictionary(Of String(), String) From {
            {{Environment.ExpandEnvironmentVariables("%SystemRoot%\System32\en-US\cmd.exe.mui"),
              Environment.ExpandEnvironmentVariables("%SystemRoot%\SysWOW64\en-US\cmd.exe.mui")},
              "Administrator: "},
            {{Environment.ExpandEnvironmentVariables("%SystemRoot%\System32\es-ES\cmd.exe.mui"),
              Environment.ExpandEnvironmentVariables("%SystemRoot%\SysWOW64\es-ES\cmd.exe.mui")},
              "Administrador: "}
        }

        For Each key As String() In dict.Keys
            For Each filepath As String In key
                If File.Exists(filepath) Then
                    Console.WriteLine(String.Format("Searching for string: '{0}' in file: '{1}'", dict(key), filepath))
                    ReplaceBytes(filepath, Encoding.GetEncoding("UTF-16").GetBytes(dict(key)), {&H81, &H0})
                End If
            Next filepath
        Next key
    End Sub

    Private Shared Sub ReplaceBytes(filepath As String, find As Byte(), replace As Byte())
        Dim buffer As Byte() = File.ReadAllBytes(filepath)
        Dim index As Integer = FindByteSequence(buffer, find, 0).DefaultIfEmpty(-1).SingleOrDefault()

        If (index <> -1) Then
            If Not File.Exists(String.Format("{0}.bak", filepath)) Then
                Console.WriteLine(String.Format("Creating backup file: '{0}.bak'", filepath))
                File.Copy(filepath, String.Format("{0}.bak", filepath), overwrite:=False)
            End If

            buffer = buffer.Take(index).Concat(replace).Concat(buffer.Skip(index + find.Length)).ToArray()

            Console.WriteLine(String.Format("Rebuilding file: '{0}'", filepath))
            Using fs As New FileStream(filepath, FileMode.Create, FileAccess.Write, FileShare.None)
                fs.Write(buffer, 0, buffer.Length)
            End Using

        Else
            Console.WriteLine(String.Format("String not found in file: '{0}'", filepath))

        End If
    End Sub

    ' Original author: https://stackoverflow.com/a/332667/1248295
    Private Shared Function FindByteSequence(buffer As Byte(), pattern As Byte(), startIndex As Integer) As ReadOnlyCollection(Of Integer)
        Dim positions As New List(Of Integer)
        Dim i As Integer = Array.IndexOf(buffer, pattern(0), startIndex)

        Do While (i >= 0) AndAlso (i <= (buffer.Length - pattern.Length))
            Dim segment(pattern.Length - 1) As Byte
            System.Buffer.BlockCopy(buffer, i, segment, 0, pattern.Length)
            If segment.SequenceEqual(pattern) Then
                positions.Add(i)
            End If
            i = Array.IndexOf(buffer, pattern(0), i + 1)
        Loop

        Return positions.AsReadOnly()
    End Function

End Class
'@ 

$vbType = Add-Type -TypeDefinition $source `
                   -CodeDomProvider (New-Object Microsoft.VisualBasic.VBCodeProvider) `
                   -PassThru `
                   -ReferencedAssemblies "Microsoft.VisualBasic.dll", `
                                         "System.dll" `
                                         | where { $_.IsPublic }

[MainClass]::Main()

$Console = [System.Console]
$Console::WriteLine("All done. Press any key to exit...")
$Console::ReadKey($true)
Exit(0)

输出

在此处输入图片描述

变更后

在此处输入图片描述

笔记:

  • 在 Windows 10.0.18363.959 上使用 PowerShell 5.1.18362.752 进行测试

  • 在@crb 答案中,它说在 64 位操作系统中用户还需要修改cmd.exe.muiSysWOW64 目录中的文件,但是我有一个 64 位 Windows 10,并且该文件不存在于 SysWOW64 目录中,无论如何我将该路径添加到代码中以防万一。

  • 我没有添加任何运行指令,mcbuilder.exe因为我发现这不是必需的......至少对我来说,在打开 CMD 的新实例时会直接应用更改。

相关内容