我处于将文件从Unix复制到Windows的情况。 Unix中的文件具有Windows不会接受的特殊字符。
我有一个XML文件,每个文件都带有标签。该XML文件将在其中一个应用程序中传递以进行处理。
<file>
。/
重命名为-
)。我当时正在考虑在PowerShell中进行操作。
示例XML:
<import>
<node type="document" action="create">
<location>XXXXXX</location>
<title>log_0.log</title>
<created>20190117</created>
<file>\test*\log/0/.log</file>
</node>
<File>
在上面的示例中有两个特殊字符...一个在文件夹名称(*
)中,另一个在文件名(//
)中。
答案 0 :(得分:0)
要解决此问题,请自行调整以下片段。
$x=[xml]@'
<import>
<node type="document" action="create">
<location>XXXXXX</location>
<title>log_0.log</title>
<created>20190117</created>
<file>\test*\log/0/.log</file>
</node>
</import>
'@
$x.SelectNodes('/import/node/file') |
ForEach-Object {
$file = $_.'#text'
[char[]]$file |
ForEach-Object {
if( [System.IO.Path]::GetInvalidPathChars() -contains $_ ) {
$file = $file.Replace($_, '_')
}
if( $_ -ne [System.IO.Path]::DirectorySeparatorChar -and
[System.IO.Path]::GetInvalidFileNameChars() -contains $_ ) {
$file = $file.Replace($_, '_')
}
}
$file
}
输出:
\test_\log_0_.log