Способ Windows CLI скопировать в тот же каталог и изменить только регистр имени файла?
У меня Windows 10 pro с файловой системой NTFS. Я думаю, что файловая система полностью чувствительна к регистру. Я могу хранить файл Bill_and_Ted.txt в каталоге и писать сценарии, которые не примут его за bill_and_ted.txt. Приложения Linux WSL, обращающиеся к каталогам NTFS, полностью чувствительны к регистру. Но похоже утилиты Windows путаются.
Таким образом, NTFS, вероятно, чувствительна к регистру, но, возможно, Windows — нет. Возможно ли в Windows создать два файла в одном каталоге, которые различаются только регистром ASCII?
По разным причинам разработки программного обеспечения я хотел бы разместить файлы Bill_and_Ted.txt и bill_and_ted.txt в одном каталоге, а затем изменить их содержимое. Но до сих пор Powershell Copy-Item и Windows xcopy отказываются копировать в один и тот же каталог, когда имена файлов различаются только в случае. Они терпят неудачу с сообщением «Файл не может быть скопирован сам на себя».
Есть ли встроенный в Windows способ копирования в тот же каталог и изменения только регистра имени файла?
2 ответа
Это может быть полезно.
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
это имя вашей переменной для каждого элемента. - - перечисляет все файлы и подкаталоги в каталоге.
- - (параметр для каталога) Используются строчные буквы.
-
/b
- (параметр для каталога) Использует чистый формат, только имена файлов/каталогов, без размера и заголовков. -
/a-d
- (параметр для каталога ) Не перечислять каталоги . (a
означаетattribute
,-
означаетnot
иd
означаетdirectory
) . -
rename "%f" "%f"
- переименуйте файл, присвоив ему собственное имя, которое на самом деле написано строчными буквами.dir
команда и/l
комбинация.
Короткий ответ: пока вы используете Windows, это не будет работать. Windows API не поддерживает чувствительность к регистру.
в отношении:https://stackoverflow.com/questions/33998669/windows-ntfs-and-case-sensitivity