Tom*_*man 1 xml powershell copy file nodes
我对 PowerShell 相当陌生,但迄今为止使用它的能力有限。
所以,这是我的问题:我有 100,000 个 xml 文件,其中包含一个具有 State 值的节点。我想使用 PowerShell 读取文件,然后将文件复制到各自的 State 文件夹中。我可以让文件夹已经创建或者让 PS 脚本来完成。两者都可以,但我想了解如何执行以下操作:1. 将文件复制到特定文件夹,2. 创建文件夹,然后将文件复制到其中。
例子:
XML1
<Member>
<LastName>LASTNAME1</LastName>
<FirstName>FIRSTNAME1</FirstName>
<AddressParent>
<Address>
<Type>HOME1</Type>
<Address1>123 STREET</Address1>
<State>FL</State>
</Address>
</AddressParent>
</Member>
Run Code Online (Sandbox Code Playgroud)
XML2
<Member>
<LastName>LASTNAME2</LastName>
<FirstName>FIRSTNAME2</FirstName>
<AddressParent>
<Address>
<Type>HOME1</Type>
<Address1>234 STREET</Address1>
<State>NY</State>
</Address>
</AddressParent>
</Member>
Run Code Online (Sandbox Code Playgroud)
重申一下:我想读取单个文件夹中存在的文件。根据<State>节点将文件复制到各自的 State 文件夹中。
另外,每个 XML 文件有超过 1 个<State>节点,因此我需要使用绝对路径(不确定这是否是正确的术语)。
我想提前感谢大家,非常感谢你们提供的任何帮助。
用于Select-Xml提取<State>每个文档中的第一个节点,然后根据该节点移动文件:
Get-ChildItem |Select-Xml -XPath '//State[1]' |ForEach-Object {
$State = $_.Node.InnerText
# Check to see if folder already exists, otherwise create it
if(-not(Test-Path $State)){
$null = mkdir $State
}
# Move the source file to the state folder
Move-Item -LiteralPath $_.Path -Destination $State
}
Run Code Online (Sandbox Code Playgroud)
XPath 谓词的含义是:
// # Anywhere in the node tree
State # Find a <State> node
[1] # Select the one at position 1
Run Code Online (Sandbox Code Playgroud)