错误还是功能?Powershell 7.2.6 Move-Item 在 Windows 10 上重新调整大小写移动的文件

Bug or Feature? Powershell 7.2.6 Move-Item re-cases moved file on Windows 10

提问人:Jayden 提问时间:8/16/2022 最后编辑:Jayden 更新时间:8/16/2022 访问量:59

问:

在 Windows 10 上的 PowerShell (7.2.6) 中使用 Move-Item cmdlet 时,文件将从其现有大小写“重新大小写”为用于标识它的参数中使用的任何大小写。由于 Windows 的文件系统中不区分大小写,我们希望路径匹配,但我没想到移动的文件会重新大小写为用于查找它的文件(而不是文件的磁盘上原始大小写)。-Path

这是一个错误还是一个功能?我在文档中找不到任何提及此行为的内容

例如:

<# PowerShell Script to demonstrate how Move-Item changes the casing of a file 
   based on the case used in the Path parameter.
#>

$base_dir = '~'
$original_file_name = 'test.txt'
$original_file_path = [System.IO.Path]::Combine($base_dir, $original_file_name)
$search_filename = $original_file_path.ToUpper()        # deliberaly change the case of the file
$move_to_path = [System.IO.Path]::Combine($base_dir, 'testsubfolder')   # this folder will be removed so ensure it doesn't match something you already have in your home folder that you want to keep
$cleanup = $true    # set to false to persist files used for testing

# Create a file to test
Set-Content -Path $original_file_path -Value "hello world"

# Setup a subfolder to move the file to
if ((Test-Path -Path $move_to_path)) { Remove-Item -Path $move_to_path }
New-Item $move_to_path -ItemType Directory -Force | Out-Null

# Show the casing of the original file
Get-ChildItem -Path ([System.IO.Path]::Combine($base_dir, '*')) -Filter $original_file_name | Select-Object -Property FullName

# Deliberately case the name of the file differently, starting with a capital 'T'
Move-Item -Path $search_filename -Destination $move_to_path | Out-Null

#Show the casing of the 'moved' file
Get-ChildItem -Path $move_to_path | Select-Object -Property FullName

if ($cleanup)
{
    if (Test-Path -Path $original_file_name -PathType Leaf) { Remove-Item -Path $original_file_name }
    if (Test-Path -Path $move_to_Path -PathType Container) { Remove-Item -Path $move_to_path }
}

您将获得以下输出:

FullName
--------
C:\Users\You\test.txt
C:\Users\You\subfolder\TEST.TXT

如您所见,移动的文件现在具有与用于指定原始路径的大小写相匹配的大小写,而不是原始文件的大小写。我本来以为顾名思义,文件应该被移动,而不是“重新大小写”。是的,在 Windows 系统上,这在功能上与 Windows 不区分大小写的文件相同,但我认为 PowerShell 7.2.6 是跨平台的,这在 Windows 上是不需要的行为。

这在打包基于 linux 的系统上使用的应用程序时给我带来了一些小问题,该系统需要不同的文件大小写(由于这种行为,文件被重新大小写)。

这是一个错误还是一个功能?

Windows PowerShell IO 跨平台

评论

0赞 Thomas Ertl 10/4/2022
也许在那里问更有意义:https://github.com/PowerShell/PowerShell/issues

答: 暂无答案