将批次中的给定变量插入到现有 xml 文件中

将批次中的给定变量插入到现有 xml 文件中

这是我想要完成的任务...如果只通过批量处理就能完成...那么现在呢?

我不想从 netdom 语句中实际重命名客户端,而是想将 %strComputer% 变量插入到 xml 文件中,或者至少用同一个变量替换文本。xml 文件将是用于 SysPrepping Windows 7 客户端的 unattend.xml 文件。

这是我想要修改的部分:

%str计算机名%

本质上,insert_name 语句用于将新名称插入到 xml 文件中,而不是 netdom.exe 命令。

发布的代码在我的自动重命名过程中运行得非常好!步骤概述了脚本的工作原理。

请注意 for /f 语句和 :insert_name 标签。其他所有内容均可忽略。

  1. 使用 WMIC 检索 MAC 地址
  2. 将该 MAC 地址与 pdqmac2pcname.txt 文件进行比较,以确定 MAC 地址是否匹配。
  3. 当 MAC 地址匹配时,名称将作为 newname 变量 %strComputername% 通过管道传输到 netdom 语句
  4. 然后脚本将转到 insert_name 并
  5. 如果发现 MAC 地址与计算机名称一致,则脚本将转到标签 kill_autologon 以强制计算机不自动登录。此过程可防止不正确重命名的计算机以 SysPreped 随机生成的名称加入域。
  6. 如果找不到名称或 MAC 地址不匹配,计算机将不会加入域,并且
  7. 计算机重新启动到登录屏幕,以便可以手动重命名并加入域。

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 行。

可行吗?

相关内容