Windows CLI 方式复制到同一目录并仅更改文件名的大小写?

Windows CLI 方式复制到同一目录并仅更改文件名的大小写?

我有 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-代表notd代表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

HowToGeek 文章解释 setCaseSensitiveInfo 标志

感谢这个 stackoverflow 答案!

相关内容