Скопируйте короткое имя файла 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 файлы и т.д.), тогда эти ссылки больше не будут действительны. Используйте любое решение с осторожностью.

Другие вопросы по тегам