![将批次中的给定变量插入到现有 xml 文件中](https://linux22.com/image/1361359/%E5%B0%86%E6%89%B9%E6%AC%A1%E4%B8%AD%E7%9A%84%E7%BB%99%E5%AE%9A%E5%8F%98%E9%87%8F%E6%8F%92%E5%85%A5%E5%88%B0%E7%8E%B0%E6%9C%89%20xml%20%E6%96%87%E4%BB%B6%E4%B8%AD.png)
这是我想要完成的任务...如果只通过批量处理就能完成...那么现在呢?
我不想从 netdom 语句中实际重命名客户端,而是想将 %strComputer% 变量插入到 xml 文件中,或者至少用同一个变量替换文本。xml 文件将是用于 SysPrepping Windows 7 客户端的 unattend.xml 文件。
这是我想要修改的部分:
%str计算机名%
本质上,insert_name 语句用于将新名称插入到 xml 文件中,而不是 netdom.exe 命令。
发布的代码在我的自动重命名过程中运行得非常好!步骤概述了脚本的工作原理。
请注意 for /f 语句和 :insert_name 标签。其他所有内容均可忽略。
- 使用 WMIC 检索 MAC 地址
- 将该 MAC 地址与 pdqmac2pcname.txt 文件进行比较,以确定 MAC 地址是否匹配。
- 当 MAC 地址匹配时,名称将作为 newname 变量 %strComputername% 通过管道传输到 netdom 语句
- 然后脚本将转到 insert_name 并
- 如果发现 MAC 地址与计算机名称一致,则脚本将转到标签 kill_autologon 以强制计算机不自动登录。此过程可防止不正确重命名的计算机以 SysPreped 随机生成的名称加入域。
- 如果找不到名称或 MAC 地址不匹配,计算机将不会加入域,并且
- 计算机重新启动到登录屏幕,以便可以手动重命名并加入域。
setlocal enabledelayedexpansion
FOR /F "skip=1 tokens=*" %%I IN ('WMIC Path Win32_NetworkAdapter Where "NetConnectionID='Local Area Connection'" Get MACAddress') DO IF NOT DEFINED MACAddress SET MACAddress=%%I
FOR /F "usebackq delims=, tokens=1,2" %%J IN (`type C:\rename_computer\pdqmac2pcname.txt`) DO IF %MACAddress% EQU %%J SET strComputername=%%K && GOTO insert_name
)
goto kill_autologon
:insert_name
C:\windows\system32\netdom.exe renamecomputer %COMPUTERNAME% /NewName:%strComputername% /FORCE
goto shutdown
:kill_autologon
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoLogonCount /f
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f
:shutdown
shutdown -r -t 0
exit
答案1
首先,enabledelayedexpansion 是用 ! 完成的,而不是用 % 因此是 !var! 而不是 %var%
如果已知 XML 是一致的,那么您所要做的就是将其拆分,然后再将其与缺失的部分合并:
xml
blah blah
strComputername
blah blah
/xml
像这样分割:
文件 1:
xml
blah blahEOL
文件 3:
blah blah
/xml
不要将 strComputername 放入 file2 中并进行二进制合并:copy /b file1+file2+file3 unattend.xml
请注意,每个文件都有一个 EOL,基本上在 file2 中您必须放入包含 strComputername 的整个 xml 行。
可行吗?