使用Move-Item命令时如何保留文件名大小写?
如何在PowerShell移动文件时保留文件名的大小写?
这个问题我之前也碰到过,其实核心原因在于Windows文件系统的大小写特性——NTFS本身支持保留文件名的大小写,但默认是不区分大小写的(简单说就是系统认为FileName.mdf和filename.mdf是同一个文件)。Move-Item有时候会因为系统的默认行为自动调整文件名的大小写,不过我们可以通过几个方法强制保留原文件名的大小写:
方法一:用-LiteralPath参数指定源文件
有时候直接写路径时,PowerShell可能会在解析过程中悄悄调整大小写,改用-LiteralPath参数就能严格按照你输入的路径字符串来操作,完全不做任何大小写的自动转换。执行命令如下:
Move-Item -LiteralPath C:\From\FileName.mdf -Destination C:\To\ -Force
方法二:先复制再删除(确保精准控制文件名)
如果第一种方法还是没效果,可以先复制文件到目标目录,直接指定目标文件名的大小写,再删除源文件。这样能确保目标文件的大小写和源文件完全一致:
# 复制时指定完整的目标文件名(包含正确大小写) Copy-Item -LiteralPath C:\From\FileName.mdf -Destination C:\To\FileName.mdf -Force # 删除源文件 Remove-Item -LiteralPath C:\From\FileName.mdf -Force
方法三:检查目标目录的现有文件
如果目标目录里已经存在一个不区分大小写的同名文件(比如已经有filename.mdf),那即使你用Move-Item覆盖,系统也不会改变现有文件的大小写。这种情况下,你需要先删除目标目录里的旧文件,再执行移动操作;或者在移动时直接指定目标文件名的大小写,确保覆盖时用你想要的格式。
可选:开启目标目录的区分大小写功能
如果你需要长期在这个目录下保留文件名的大小写,可以开启该目录的区分大小写特性(需要管理员权限)。执行以下命令:
fsutil file setCaseSensitiveInfo C:\To enable
开启后,这个目录下的文件会严格区分大小写,后续的所有文件操作都会保留文件名的大小写。不过要注意,有些Windows程序默认是不区分大小写的,开启这个设置可能会影响这些程序的正常访问,谨慎使用。
内容的提问来源于stack exchange,提问作者Joost
相关产品推荐
相关产品推荐

