如何在PowerShell中使用foreach循环获取XML文件内容?
解决PowerShell遍历XML文件内容的错误问题
我来帮你搞定这个问题~你遇到的错误是因为Select-Object -Property Name返回的是包含Name属性的对象,而不是单纯的文件名字符串。当你把这个对象传给Get-Content时,PowerShell会把对象转换成默认的字符串表示@{Name=<filename>.xml},自然找不到对应的路径啦。
下面给你几种正确的实现方式:
方法1:展开Name属性得到纯字符串数组
先把文件名提取成纯字符串,再循环读取内容:
$test = Get-ChildItem | Select-Object -ExpandProperty Name foreach ($i in $test) { Get-Content $i }
-ExpandProperty会直接把Name属性的值提取出来,这样$test里存的就是每个文件的名称字符串,传给Get-Content就能正确识别路径了。
方法2:直接遍历文件对象(更推荐)
其实不用单独存变量,直接遍历Get-ChildItem返回的文件对象,用它的FullName属性(完整路径)来读取,这样即使不在当前工作目录也不会出错:
foreach ($file in Get-ChildItem) { Get-Content $file.FullName }
方法3:更简洁的管道写法
用ForEach-Object直接通过管道处理,代码更紧凑:
Get-ChildItem | ForEach-Object { Get-Content $_.FullName }
如果只想处理XML文件,可以给Get-ChildItem加上过滤条件:
Get-ChildItem -Filter *.xml | ForEach-Object { Get-Content $_.FullName }
内容的提问来源于stack exchange,提问作者Manish Nagar
相关产品推荐
相关产品推荐

