文件名中的冒号创建了伪文件夹。我如何查看里面的内容?

文件名中的冒号创建了伪文件夹。我如何查看里面的内容?

我可以创建一个名称中带有冒号的文件:。据我所知,这在 Windows 中是不可能实现的。我最初是通过将带有冒号的文本复制:到文件名中,以使用 Notepad++ 保存文本文件来实现的。如果我知道确切的名称,我可以使用 Notepad++ 打开该文件。有一个文件的名称与冒号前的文本相同,:属性显示大小为 0 字节,但如果保存时没有冒号,则磁盘上的大小似乎与文件的大小相同:

我使用 PowerShellSet-Content进行了复现Get-Content

Set-Content -Path .\test:test.txt -Value "colon filename test"
Get-Content -Path .\test:test.txt

返回:
colon filename test
请注意,这个小文件在磁盘上显示 0 字节,与从 Notepad++ 保存的较大的 44 kb 文件不同。

Get-ChildItem仅显示长度为 0 的伪文件夹。

Remove-Item -Path .\test:test.txt可以工作,但伪文件夹仍然存在。
还必须使用 将其删除Remove-Item -Path .\test

我正在运行 Windows 10 和 PowerShell 5.1。

答案1

这并不是什么新鲜事,与 Powershell 无关。

您的职位:

“我可以创建一个名称中带有冒号 : 的文件,这在 Windows 中是不可能的。”

...无效。

几十年来,Windows 一直可以做到这一点。它被称为 ADS(备用数据流),这不是一个文件夹,而只是嵌入/附加/隐藏在数据文件中的额外数据(文本、图片等)。这是有据可查的。根据设计,ADS 永远不会增加原始文件的大小。

这也是一种安全的东西,叫做隐写术,是的,当您使用这样的技术时,您需要确切地知道流名称是什么。

只需搜索“Windows 备用数据流”或者‘Windows 备用数据流视图’并且你会得到很多关于它是什么、为什么存在、如何做以及如何阅读它们的信息。

您可以使用名为 streams.exe 的 Microsoft SysInternals 工具去看看它们。

https://www.bleepingcomputer.com/tutorials/windows-alternate-data-streams

您也可以搜索PowerShell 读取“备用数据流”看看如何阅读它们。

最后,关于这个……

“Remove-Item -Path .\test:test.txt 有效,但伪文件夹仍然存在。”

... 这也是无效的。当您删除主文件时,与其关联的所有内容都将被删除,因为它的存在只是因为主文件存在。

删除 ADS 和删除整个文件是有区别的。

$TargetPath = 'D:\Test\ADSStuff'
Set-Content -Path "$TargetPath\test:test.txt" -Value "colon filename test"
Get-ChildItem -Path $TargetPath -Recurse
Get-Content -Path "$TargetPath\test:test.txt"
# colon filename test
Remove-Item "$TargetPath\test" -Force
Get-ChildItem -Path $TargetPath -Recurse
Get-Content -Path "$TargetPath\test:test.txt"
<#
Get-Content : Cannot find path 'D:\Test\ADSStuff\test:test.txt' because it does not exist.
At line:1 char:1
+ Get-Content -Path "$TargetPath\test:test.txt"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (D:\Test\ADSStuff\test:test.txt:String) [Get-Content], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
#>

相关内容