[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
flashercs 发表于 2019-8-4 11:40

谢谢你的解答!
我试了下但报错,
  1. True
  2. Modify XML
  3. 请输入需要替换的字符串:
  4. From: 8888
  5. To: 3333
  6. 在此对象上找不到属性“nodeValue”。请确认该属性存在并且可设置。
  7. 所在位置 行:35 字符: 60
  8. + ... .SelectSingleNode("//ComputerName[text()=`"$prefix$($dic.From)`"]/tex ...
  9. +                                                         ~~~~~~~~~
  10.     + CategoryInfo          : InvalidOperation: (:) [],RuntimeException
  11.     + FullyQualifiedErrorId : PropertyNotFound
  12. 请按任意键继续. . .
复制代码
可不可是纯批处理脚本,因为我要在WinPE下运行的;
还有就是最好就是直接修改,不要输入原来字串,因为不能每次使用时打开文件查看一下PCZF后面4个字符。

TOP

本帖最后由 flashercs 于 2019-8-4 20:36 编辑
  1. @echo off
  2. Powershell -Command "$flag = $false; $sb = $ExecutionContext.InvokeCommand.NewScriptBlock((Get-Content -LiteralPath \"%~0\" | ForEach-Object { if ($flag) { $_ }else { if ($_ -match '#+Powershell#+') { $Script:flag = $true } } }) -join \"`r`n\"); & $sb "
  3. pause
  4. exit /b
  5. ########Powershell########
  6. # XML文件路径
  7. $xmlpath = "E:\test\new folder\zuma\1.xml"
  8. # 计算机名前缀
  9. $prefix = "PCZF"
  10. function MakeDOM {
  11.   param (
  12.    
  13.   )
  14.   $dom = try {
  15.     New-Object -ComObject 'Msxml2.DOMDocument.6.0'
  16.   }
  17.   catch {
  18.     try {
  19.       New-Object -ComObject 'Msxml2.DOMDocument.3.0'
  20.     }
  21.     catch {
  22.       try {
  23.         New-Object -ComObject 'Msxml2.DOMDocument'
  24.       }
  25.       catch {
  26.         throw
  27.       }
  28.     }
  29.   }
  30.   $dom.async = $false
  31.   $dom.validateOnParse = $false
  32.   $dom.resolveExternals = $false
  33.   $dom.setProperty('AllowDocumentFunction', $false)
  34.   $dom.setProperty('AllowXsltScript', $false)
  35.   $dom.setProperty('MaxElementDepth', 256)
  36.   $dom.setProperty('ProhibitDTD', $true)
  37.   $dom.setProperty('SelectionLanguage', 'XPath')
  38.   return $dom
  39. }
  40. function parseError {
  41.   param(
  42.     $dom
  43.   )
  44.   $myErr = $dom.parseError
  45.   if ($myErr.errorCode -ne 0) {
  46.     Write-Host -InputObject "XML parse error" -ForegroundColor Red
  47.     Out-Host -InputObject @{
  48.       'reason'  = myErr.reason;
  49.       'code'    = myErr.errorCode.toUIString(16);
  50.       'filepos' = myErr.filepos;
  51.       'line'    = myErr.line;
  52.       'linepos' = myErr.linepos;
  53.       'srcText' = myErr.srcText;
  54.       'url'     = myErr.url
  55.     }
  56.     return $true
  57.   }
  58.   return $false
  59. }
  60. $xmldoc = MakeDOM
  61. try {
  62.   $xmldoc.load($xmlpath) | Out-Null
  63.   if (parseError $xmldoc) {
  64.     throw
  65.   }
  66.   do {
  67.     $dic = $host.UI.Prompt('Modify XML', '请输入替换前和替换后的字符串:', @('From', 'To'))
  68.     try {
  69.       $xmldoc.SelectSingleNode("//ComputerName[text()=`"$prefix$($dic.From)`"]/text()").nodeValue = $prefix + $dic.To
  70.       Write-Host "Success" -ForegroundColor Green
  71.     }
  72.     catch {
  73.       Write-Host "Failed" -ForegroundColor Green
  74.     }
  75.     $choice = $host.UI.PromptForChoice('继续修改', '是否继续?', @([System.Management.Automation.Host.ChoiceDescription]::new('Y', 'Yes'), [System.Management.Automation.Host.ChoiceDescription]::new('N', 'No')), 0)
  76.   } until ($choice)
  77.   $xmldoc.save($xmlpath)
  78. }
  79. catch {
  80.   
  81. }
  82. finally {
  83.   [System.Runtime.InteropServices.Marshal]::ReleaseComObject($xmldoc) | Out-Null
  84.   Remove-Variable -Name xmldoc
  85.   [gc]::collect()
  86.   [gc]::WaitForPendingFinalizers()
  87. }
复制代码
微信:flashercs
QQ:49908356

TOP

回复 2# flashercs

是的

TOP

这是改计算机名?
把0001 改为 0004 之类?
微信:flashercs
QQ:49908356

TOP

返回列表