我有 Windows 10 专业版,带有 NTFS。我认为文件系统完全区分大小写。我可以将文件 Bill_and_Ted.txt 放在目录中,并编写不会将其误认为 bill_and_ted.txt 的脚本。访问 NTFS 目录的 Linux WSL 应用程序完全区分大小写。但似乎 Windows 实用程序会混淆。
因此 NTFS 可能区分大小写,但 Windows 可能不区分大小写。在 Windows 中是否可以在同一目录中创建两个仅在 ASCII 大小写上不同的文件?
出于各种软件开发原因,我希望将文件 Bill_and_Ted.txt 和 bill_and_ted.txt 放在同一目录中,然后更改内容。但到目前为止,当文件名仅在大小写上不同时,Powershell Copy-Item 和 Windows xcopy 拒绝复制到同一目录。它们失败并显示“文件无法复制到自身”
是否有内置的 Windows 方法可以复制到同一目录并仅更改文件名的大小写?
答案1
这可能会有帮助。
https://superuser.com/a/412413/1176865
进入目录并运行以下命令:
for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")
如果有人想修改/改进,请按照以下细分:
for /f
- 每一行"Tokens=*"
- 处理每一行中的每个项目。%f in (...)
-%f
是每个项目的变量名。dir
- 列出目录下的每个文件和子目录。/l
-(目录参数)使用小写。/b
-(目录参数)使用裸格式,仅文件/目录名称,没有大小,没有标题。/a-d
-(目录参数)做不是列表目录。(a
代表attribute
、-
代表not
、d
代表directory
)。rename "%f" "%f"
- 使用文件自己的名称重命名文件,该名称实际上是通过dir
命令和/l
组合小写的。
答案2
简短的回答是,只要您使用 Windows,它就不会起作用。Windows API 不支持区分大小写。
在参照 : https://stackoverflow.com/questions/33998669/windows-ntfs-and-case-sensitivity
答案3
setCaseSensitiveInfo
一种解决方案是使用 fsutil在包含目录上启用该标志。因此,在我的例子中,我将 Set-Location 设置为目标目录,然后使用:
fsutil.exe file setCaseSensitiveInfo (Get-Location) enable