读取文件、修改内容和写入新文件



我正在尝试修改一个文件夹中一组文件的内容,并将修改后的文件写入另一个文件夹。 修改位很容易并且效果很好,但设置新内容会失败。这是代码:

$files = Get-ChildItem "~DesktopTest1*.txt"
foreach ($f in $files)
{
Get-Content "$f" |
Where-Object { -not $_.Contains('VOID') } |
Set-Content "~DesktopTest2$f"
}

运行时出现的错误是:设置内容:无法打开文件"\用户\笔记本电脑\台式机\测试1\测试.txt"的备用数据流"\用户\笔记本电脑\台式机\测试1\测试"。

"Test2\C"是什么意思?C从何而来?

这一定是一个非常容易的解决方法,但我可以使用一些帮助。

若要确保仅使用每个输入文件的文件名,请将

"~DesktopTest2$f"

"~DesktopTest2$($f.Name)"

如果将$f作为一个整体("$f")字符串化,则会在它表示的System.IO.FileInfo实例上调用.ToString()方法,该方法返回完整路径(通常在Windows PowerShell中,始终在PowerShell(核心)7+中),因此最终会得到格式错误的路径,例如C:UserjdoeDesktopTest2C:UserjdoeDesktopTest1foo.txt- 也就是说,您有效地将完整路径追加到另一个完整路径。


至于你尝试过的

"Test2\C"是什么意思?C从何而来?

C$f字符串化的完整路径的驱动器号(例如,C:UserjdoeDesktopTest1foo.txt)

缺少路径其余部分的原因是(意外)第二个:(第一个来自扩展形式的~DesktopTest1*.txt驱动器号)之后的所有内容都被解释为备用 NTFS 数据流 (ADS) 的标识符。
错误是由(意外)标识符包含无效字符的事实引起的,.

最新更新