试图从命令行复制一个名为“SCOOTE~1.txt”的文件到一个文件夹,其中有一个名为“Scooter - Cosmos.txt”的文件。
问题是副本也会将“Scooter - Cosmos.txt”的名称收缩为“Scoote~1.txt”,并询问我是否要覆盖该文件。
如何在不影响其他长名文件的情况下逐字复制“SCOOTE~1.txt”?接受外部命令行工具的建议。
试图从命令行复制一个名为“SCOOTE~1.txt”的文件到一个文件夹,其中有一个名为“Scooter - Cosmos.txt”的文件。
问题是副本也会将“Scooter - Cosmos.txt”的名称收缩为“Scoote~1.txt”,并询问我是否要覆盖该文件。
如何在不影响其他长名文件的情况下逐字复制“SCOOTE~1.txt”?接受外部命令行工具的建议。
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
位置等),那么这些引用将不再有效。请谨慎使用任一解决方案。