Скопируйте короткое имя файла 8.3 в длинном режиме (Windows)
Попытка скопировать из командной строки файл с именем "SCOOTE~1.txt" в папку, где находится файл с именем "Scooter - Cosmos.txt".
Проблема в том, что копия будет сокращать имя "Scooter - Cosmos.txt" до "Scoote~1.txt", а также спросит, хочу ли я перезаписать этот файл.
Как я могу буквально скопировать "SCOOTE~1.txt", не затрагивая другие файлы с длинными именами? Предложение внешних инструментов командной строки принято.
1 ответ
Воссоздание проблемы
c:\Test> > "Scooter - Cosmos.txt" echo File with long name
c:\Test> md SFN
c:\Test> > "SFN\SCOOTE~1.TXT" echo File with short name
c:\Test> dir/s/x
Volume in drive C is OS
Volume Serial Number is BE3C-8BC1
Directory of c:\Test
22/09/2017 08:51 <DIR> .
22/09/2017 08:51 <DIR> ..
22/09/2017 08:50 21 SCOOTE~1.TXT Scooter - Cosmos.txt
22/09/2017 08:51 <DIR> Test
1 File(s) 21 bytes
Directory of c:\Test\SFN
22/09/2017 08:51 <DIR> .
22/09/2017 08:51 <DIR> ..
22/09/2017 08:51 22 SCOOTE~1.TXT
1 File(s) 22 bytes
Total Files Listed:
2 File(s) 43 bytes
5 Dir(s) 104,170,942,464 bytes free
Здесь в текущем каталоге есть файл с длинным именем Scooter - Cosmos.txt
и короткое имя SCOOTE~1.TXT
(Примечание: сокращенное имя уже используется на данном этапе). Также в каталоге SFN
содержит файл с именем SCOOTE~1.TXT
- потому что это имя "подходит" в формате 8.3, у него нет отдельного короткого имени.
Если мы сейчас попытаемся скопировать этот файл в текущий каталог, так как короткое / единственное имя копируемого файла совпадает с коротким именем уже существующего файла, он запросит перезапись:
c:\Test> copy "SFN\SCOOTE~1.TXT"
Overwrite c:\Test\SCOOTE~1.TXT? (Yes/No/All): n
0 file(s) copied.
Исправление для одного экземпляра
Как подсказал eryksun, вы можете использовать fsutil file setshortname
Команда для исправления разовых конфликтов путем изменения краткого имени файла в текущем каталоге:
c:\Test> fsutil file setshortname "Scooter - Cosmos.txt" SCOOTE~2.TXT
c:\Test> dir/x
Volume in drive C is OS
Volume Serial Number is BE3C-8BC1
Directory of c:\Test
22/09/2017 09:09 <DIR> .
22/09/2017 09:09 <DIR> ..
22/09/2017 08:50 21 SCOOTE~2.TXT Scooter - Cosmos.txt
22/09/2017 08:51 <DIR> SFN
1 File(s) 21 bytes
3 Dir(s) 104,168,501,248 bytes free
c:\Test> copy "SFN\SCOOTE~1.TXT"
1 file(s) copied.
c:\Test> dir/x
Volume in drive C is OS
Volume Serial Number is BE3C-8BC1
Directory of c:\Test
22/09/2017 09:09 <DIR> .
22/09/2017 09:09 <DIR> ..
22/09/2017 08:50 21 SCOOTE~2.TXT Scooter - Cosmos.txt
22/09/2017 08:51 22 SCOOTE~1.TXT
22/09/2017 08:51 <DIR> SFN
2 File(s) 43 bytes
3 Dir(s) 104,168,464,384 bytes free
Здесь мы можем видеть, что короткое имя Scooter - Cosmos.txt
был изменен, чтобы он больше не конфликтовал с SCOOTE~1.TXT
; Копирование продолжается без предупреждения, и оба файла располагаются рядом в текущем каталоге.
Исправление нескольких экземпляров
Если есть (или может быть) несколько конфликтов с файлами в целевом каталоге, альтернативный подход заключается в использовании fsutil 8dot3name strip
команда для удаления коротких имен в формате 8.3 сразу из всех файлов:
c:\Test> fsutil 8dot3name strip .
Scanning registry...
Total affected registry keys: 0
Stripping 8dot3 names...
Total files and directories scanned: 2
Total 8dot3 names found: 1
Total 8dot3 names stripped: 1
For details on the operations performed please see the log:
"C:\Users\xxxxxxxx\AppData\Local\Temp\8dot3_removal_log @(GMT 2017-09-22 08-36-00).log"
c:\Test> dir/x
Volume in drive C is OS
Volume Serial Number is BE3C-8BC1
Directory of c:\Test
22/09/2017 09:36 <DIR> .
22/09/2017 09:36 <DIR> ..
22/09/2017 08:50 21 Scooter - Cosmos.txt
22/09/2017 09:33 <DIR> SFN
1 File(s) 21 bytes
3 Dir(s) 104,154,349,568 bytes free
Как видно, файл Scooter - Cosmos.txt
больше не имеет короткого имени, поэтому нет столкновения, когда SCOOTE~1.TXT
копируется в текущий каталог:
c:\Test> copy "SFN\SCOOTE~1.TXT"
1 file(s) copied.
c:\Test> dir/x
Volume in drive C is OS
Volume Serial Number is BE3C-8BC1
Directory of c:\Test
22/09/2017 09:40 <DIR> .
22/09/2017 09:40 <DIR> ..
22/09/2017 08:50 21 Scooter - Cosmos.txt
22/09/2017 08:51 22 SCOOTE~1.TXT
22/09/2017 09:33 <DIR> SFN
2 File(s) 43 bytes
3 Dir(s) 104,151,703,552 bytes free
ПРИМЕЧАНИЕ. Первый этап этой команды - Scanning registry...
- может занять некоторое время, пока он просматривает реестр на наличие ссылок на имена в формате 8.3, которые собираются удалить. Увидеть fsutil 8dot3name strip /?
для более подробной информации об этой команде.
Внимание (относится к обоим методам)
Как помощь от fsutil 8dot3name strip /?
команда говорит:
Эта команда навсегда удаляет имена файлов 8dot3 с вашего тома. В нем будут перечислены ключи реестра, указывающие на удаленные 8dot3names, но не будут изменены затронутые ключи реестра. Разборка не будет выполняться для файлов с полными именами, длина которых превышает максимальную длину пути в 260 символов.
обе эти команды изменяют (или удаляют) имена выбранных файлов в формате 8.3. Если у вас есть какие-либо ссылки на соответствующие файлы (в реестре, файлах конфигурации или где-либо еще в .BAT
файлы и т.д.), тогда эти ссылки больше не будут действительны. Используйте любое решение с осторожностью.