.bat 和 cmd 中的 运行 之间的净用户管理员密码差异?

net user Administrator password difference between running in .bat and from cmd?

我正在尝试使用以下命令通过 .bat 文件设置管理员密码

net user Administrator my_password

如果我在命令提示符中写下确切的行,一切正常,我可以在注销或重新启动后再次登录。 当我 运行 .bat 文件时,我在注销或重新启动后无法登录。 有什么区别,我怎样才能使它从 .bat 文件或其他脚本运行?

编辑: 我 运行 只需单击 .bat 文件,我就以管理员身份登录。该命令确实给出了一条成功消息,并且它显然更改了密码,因为之后我无法使用旧密码。

我想密码字符串至少包含 1 个非 ASCII 字符,即代码值大于十进制 127 的字符。

打开命令提示符 window 并输入 chcp(更改代码页命令)。根据 Windows 区域和语言设置,您会显示活动代码页是 code page 850 (Western European country) or code page 437(北美国家/地区)或其他内容。

在 Windows GUI 文本编辑器中编写的批处理文件很可能使用不同的代码页,如 Windows-1252(西欧和北美国家/地区)。

建议使用与 Windows 控制台相同的代码页编写批处理文件,或者根本不使用非 ASCII 字符。

但是帐号密码是很特别的东西。 Windows 知道帐户密码通常由用户使用 Windows GUI 代码页在 GUI 上输入。因此,在控制台 window 中输入的帐户密码会自动从 OEM 代码页转换为 Windows (ANSI) 代码页,然后再通过 Windows.

加密和保存。

因此批处理文件应包含以 OEM 代码页而不是 GUI 代码页编码的密码字符串。

例如,德语元音变音字符 ä 使用 Windows-1252 时代码值为 228(十六进制 E4),但使用 OEM 代码页 850 时代码值为 132(十六进制 84)。用于打印使用命令 echo 进入控制台 window 德语单词 ähnlich,需要使用 OEM 代码页将代码值 132 写入批处理文件 ä 850 才能在控制台 window 中正确显示这个词。如果在写入批处理文件的密码中使用此字符,则必须将代码值为 132 的字符 ä 写入批处理文件。密码字符串通过命令 net.

自动从 OEM 转换为 ANSI

我想你的密码包含百分号。

区别在于cmd提示符处的百分号被保留了。
但是在批处理文件中,解析器会尝试扩展带有百分号的变量,但当百分号表达式无效时,它将被删除。

如果您想在批处理文件中使用密码,只需将百分比加倍即可。

有关变量扩展的更多信息位于 How does CMD.EXE parse scripts?