该批处理与其他几个文件一起用作启动脚本,这是我们即将进行的 Windows 7 Symantec Ghost Cast 重新映像过程的一部分。它们一起完全自动化 Sysprep 的整个重新映像过程,从文本文件重命名计算机,然后将计算机加入域并放置在正确的 OU 中。
我知道还有其他编程语言和脚本语言可以更好地执行这些相同的过程,但目前没有时间学习它们。当然,MS 的 Power-shell 和 VBS 是更好的选择,但我还没有花太多时间在这些上面,我的同事也没有。其他重命名应用程序对我来说时好时坏。Compname.exe 不适用于 Windows 7。Wsname 在我们的一些戴尔型号 790、Power Edge 服务器 850、860 和 R200 上时好时坏,甚至根本无法使用。我们的其他型号在使用第三方应用程序时似乎没有遇到任何重大问题——GX620、740、745、755、760 和 780。
我更喜欢使用操作系统中已有的本机应用程序。显然,netdom.exe 不是本机的(必须从 RSAT 可执行文件中获取文件),但它是一种简单的操作系统导入,并且是映像中必不可少的。
因此,请使用我当前正在使用的程序(批处理、netdom、getmac 和好的 ole 文本文件)提供任何答案。
该批处理文件完成以下任务:
- 使用 getmac.exe 查找本地计算机(正在重新映像)的 MAC 地址
- 改变本地 MAC 地址 (%%G)
- 通过管道传输变量化的 MAC 地址并将其与 getmac2.txt 文件 (%%A) 进行比较
- 获取相关变量 (%%B) 并
- 将 %%B 放置为 strComputername
- && 语句在找到 MAC 地址时停止操作,而不是解析整个文件
- :insert_name 标签运行 netdom.exe,关闭批处理并重新启动计算机。/FORCE 开关在测试期间使用但未在此处列出。'pause' 也仅用于测试。
后续脚本将计算机加入域。
现在,我想尝试一下……我希望能够通过将 MAC 地址中的破折号“-”替换为冒号“:”来修改 %%G 变量。Getmac.exe 生成的 MAC 地址类似 11-22-33-44-55-66。但是,另一个管理程序为我提供了一个 MAC 地址列表,例如 11:22:33:44:55:66。我的 getmac2.text 文件列出了带有冒号的 MAC 地址。显然,我可以从文本编辑器中自动删除冒号,但目的是尽可能减少步骤。如果执行字符串替换更容易,将 %%G 变量传输到另一个文件也不会有问题。
无论你是否相信,这个脚本确实运行完美!
getmac2.txt文件内容格式如下:
11:22:33:44:55:66,88D-350-03-780 11:22:33:44:55:77,44E-351-13-790 11:22:33:44:55:88,66F-352-23-760 11:22:33:44:55:99,22G-353-33-R200 11:22:33:44:55:00,11H-354-43-620
setlocal enabledelayedexpansion
FOR /F "usebackq delims= " %%G IN (`getmac.exe /FO table /NH`) DO (
FOR /F "usebackq delims=, tokens=1,2" %%A IN (`type C:\wsname\getmac2.txt`) DO if %%G EQU %%A SET strComputername=%%B && goto insert_name
)
:insert_name
C:\windows\system32\netdom.exe renamecomputer %COMPUTERNAME% /NewName:%strComputername%
pause
答案1
使用%variable:from=to%
或!variable:from=to!
(延迟扩展)。
set mac=%%G
set mac=%mac:-=:%