Powershell - 文件名中的变量时不支持路径格式

Posted

技术标签:

【中文标题】Powershell - 文件名中的变量时不支持路径格式【英文标题】:Powershell - path's format is not supported when variables in the file name 【发布时间】:2015-08-06 14:58:45 【问题描述】:

我正在尝试将 XML 声明添加到目录中的多个文件。该代码适用于具有硬编码名称的单个文件,但是当我想为多个文件运行它时,我收到以下错误:

“使用“1”参数调用“保存”的异常:“给定路径的 不支持格式。”

我正在使用:

$FilePath = C:\test
$files = Get-ChildItem $FilePath\*.xml
foreach ($file in $files)

$xml = [xml](get-content $file)
$decl = $xml.CreateXmlDeclaration("1.0", "ucs-2", "yes")
$xml.InsertBefore($decl, $xml.DocumentElement)
$xml.save($FilePath$file)

我一直把最后一行改成

$xml.save($FilePath+"\"+$file)
$xml.save("$FilePath\$file")

和其他格式,但仍然出现相同的错误。

【问题讨论】:

【参考方案1】:

$xml.save("$file") ?

$FilePath = "C:\test"
$files = Get-ChildItem $FilePath\*.xml
foreach ($file in $files)

$xml = [xml](get-content $file)
$decl = $xml.CreateXmlDeclaration("1.0", "ucs-2", "yes")
$xml.InsertBefore($decl, $xml.DocumentElement)
$xml.save($file)

$FilePath = "C:\Scripts"
$files = Get-ChildItem $FilePath\*.xml
foreach ($file in $files)

$xml = [xml](get-content $file)
$decl = $xml.CreateXmlDeclaration("1.0", "ucs-2", "yes")
$xml.InsertBefore($decl, $xml.DocumentElement)
$xml.save($FilePath + $file.Name)

由于 $file 已满:\path\of\file\plus\filename.xml 您正在尝试将 full:\path 添加到它。

$file 或 $Filepath + $File.Name 将起作用。

【讨论】:

谢谢。我之前尝试过,但出现错误:“拒绝访问路径 'C:\abc.xml'。”所以看起来它需要完整路径才能保存在正确的目录中。 abc.xml 是 C: 中的文件,不知道为什么要提取它 第二种解决方案有效,我只需要添加“\”。 $xml.save($FilePath + "\" + $file.Name) 。非常感谢! 只是插话:记住 $file 是一个具有属性的对象,其中之一是“名称”。在循环内设置断点并查看 $file |获取成员【参考方案2】:

我有一个类似的问题,我能够通过使用 -join 命令连接字符串来创建新的 var 来获得所需的内容。在这种情况下,我们将其称为 $XMLCompatibleFileNames

$FilePath = C:\test
$files = Get-ChildItem $FilePath\*.xml
foreach ($file in $files)

$xml = [xml](get-content $file)
$decl = $xml.CreateXmlDeclaration("1.0", "ucs-2", "yes")
$xml.InsertBefore($decl, $xml.DocumentElement)
# Join your vars as strings and add the wack (\) if not included in the directory var
# Test it with write-host $XMLCompatibleFileName
$XMLCompatibleFileName = -join ("$($FilePath)\","$($File)")
$xml.save($XMLCompatibleFileName)

【讨论】:

以上是关于Powershell - 文件名中的变量时不支持路径格式的主要内容,如果未能解决你的问题,请参考以下文章

如何将 .bat 文件中的变量导入 PowerShell 脚本?

使用 URI 复制时不支持文件名中的特殊字符

无法将正则表达式模式表单文件解析为 powershell 中的变量

IE 在引用 CSS 文件时不支持基本元素中的相对路径

Powershell将文件从环境变量复制到另一个环境变量的zip文件夹

将 powershell 输出存储在 CMD 中的变量中