使用映射到 Linux 共享的驱动器时,文件名区分大小写。PowerShell 按预期处理此问题,但我想以类似于“C”语言环境中使用的排序顺序的方式对输出进行排序,这意味着按字符值从 U+0000 一直到 U+ 升序排序10FFFF(例如,'0foo' 出现在 'Foo' 之前,'Foo' 出现在 'bar' 之前,而 'bar' 出现在 'foo' 之前)
为了说明问题:
PS > gci Z:\foo | sort -casesensitive
xyz
Xyz
XYZ
yZ
YZ
所需的输出:
XYZ
Xyz
YZ
xyz
yZ
我尝试将当前线程的文化变量设置为[System.Globalization.CultureInfo]::InvariantCulture
,但没有成功:
$thrd = [Threading.Thread]::CurrentThread
$thrd.CurrentCulture = [Globalization.CultureInfo]::InvariantCulture
$thrd.CurrentUICulture = $thrd.CurrentCulture
当我认为这与文化信息有关时,我是不是很接近,还是我真的离题很远?有人知道我应该从哪里开始吗?我猜我需要临时创建一个具有我想要的行为的 CultureInfo 实例,但它只有 CompareInfo 的吸气剂,更不用说我不确定如何重载 Sort-Object 的 CompareInfo.Compare 函数需要使用 PowerShell 函数。或者这实际上是一个失败的原因,因为这是不可能的?
编辑
至少,是否可以先用大写字符进行排序,如 XYZ、Xyz、xyz、YZ、yZ?