Powershell 重定向到包含冒号的变量值

Powershell 重定向到包含冒号的变量值

有没有办法在命令行重定向中使用值包含冒号字符的变量作为文件名字符串?无论转义字符是什么,Powershell 始终将冒号视为驱动器分隔符。如何使用冒号作为输出文件名中包含的字符文字来实现这一点?

例子:

$colonVar = "Colon:string"
echo "fileContents" > "file$colonVar.txt"

产量

找不到驱动器。名为“fileColon”的驱动器不存在。

我们可以将“fileContents”写入名为“fileColon:string.txt”的文件中吗?

我无法在字符串值或重定向字符串中使用单引号或双引号、转义符、括号或美元符号和括号的任何组合。冒号后的字符串部分始终被视为驱动器。

(使用 Powershell 2.0)

答案1

在 Windows 中,文件名不能包含冒号,因此不是 PowerShell 阻止了它,而是文件系统阻止了它。删除冒号,和/或将其替换为对文件名有效的字符。

https://support.microsoft.com/en-us/kb/177506

A filename cannot contain any of the following characters: 
\ / : * ? " < > | 

答案2

据我所知,您无法使用 PowerShell 中的重定向或Out-File或来执行此操作Tee-Object。您可以使用 写入名称带有冒号的文件Set-Content,但这会使它成为名称在冒号之前的文件的备用数据流。重定向到这些备用数据流在命令提示符中是可能的。

Set-Content -Path ".\file$colonVar.txt" -Value "fileContents"可以,但如果您在文件系统中浏览,您只会看到一个名为“fileColon”的文件,其名称中没有冒号,没有扩展名,也没有内容。
如果您想访问该流,可以使用Get-Content -Path ".\file$colonVar.txt",但我不知道使用大多数 Windows 应用程序访问该流的方法。

请参阅我的问题以了解我是如何发现这种可能性的。文件名中的冒号创建了伪文件夹。我如何查看里面的内容?

相关内容