编写PowerShell脚本:匹配配置文件路径并归档至Zip
PowerShell脚本实现从XML配置提取路径并备份归档
以下是满足需求的完整PowerShell脚本,附带详细说明:
# 配置参数,请根据实际环境修改 $configPath = "C:\path\to\your\config.xml" # 替换为你的XML配置文件路径 $targetKeys = @("TlgxDir") # 可添加多个key,例如@("TlgxDir", "LogDir") $backupRoot = "C:\temp\backup" $zipPath = "C:\temp\backup.zip" # 创建备份根目录(不存在则自动创建) if (-not (Test-Path -Path $backupRoot)) { New-Item -Path $backupRoot -ItemType Directory | Out-Null } # 读取XML配置文件 $configXml = [xml](Get-Content -Path $configPath -Encoding UTF8) # 遍历目标key,提取路径并执行复制 foreach ($key in $targetKeys) { $node = $configXml.SelectSingleNode("//add[@key='$key']") if ($node -and $node.value) { $sourcePath = $node.value # 校验源路径有效性 if (Test-Path -Path $sourcePath) { $destFolderName = Split-Path -Path $sourcePath -Leaf $destPath = Join-Path -Path $backupRoot -ChildPath $destFolderName # 递归复制文件夹及所有子内容 Copy-Item -Path $sourcePath -Destination $destPath -Recurse -Force Write-Host "已完成复制:$sourcePath -> $destPath" } else { Write-Warning "警告:源路径不存在 - $sourcePath" } } else { Write-Warning "警告:配置文件中未找到key为 '$key' 的节点" } } # 将备份目录归档为ZIP文件 if (Test-Path -Path $backupRoot) { Compress-Archive -Path "$backupRoot\*" -DestinationPath $zipPath -Force Write-Host "归档完成,ZIP文件路径:$zipPath" } else { Write-Warning "警告:备份目录为空或不存在,跳过归档操作" }
脚本关键部分说明
1. 参数配置区
开头的变量均为可自定义项:
$configPath:XML配置文件的绝对路径$targetKeys:支持同时提取多个key对应的目录,用数组形式添加即可$backupRoot:所有备份文件夹的统一存放目录$zipPath:最终生成的归档文件路径
2. XML节点定位
通过XPath表达式//add[@key='$key']精准匹配配置文件中指定key的节点,直接提取value属性中的路径,避免字符串匹配的不稳定问题。
3. 复制与归档逻辑
- 复制前自动校验源路径是否存在,避免无效操作
- 用源文件夹名称作为备份目录的子文件夹名,防止多目录复制时冲突
Copy-Item的-Recurse参数确保复制所有子文件夹和文件,-Force覆盖已存在的文件Compress-Archive的-Force参数会覆盖已存在的ZIP文件
注意事项
- 确保PowerShell拥有读取配置文件、访问源文件夹、写入备份目录的权限
- 如果配置文件编码不是UTF8,可调整
Get-Content的-Encoding参数为Default或Unicode - 路径包含空格时脚本会自动处理,无需额外转义
内容的提问来源于stack exchange,提问作者XavierJC
相关产品推荐
相关产品推荐

