尝试从命令行复制一个名为" 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> > "SFNSCOOTE~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:TestSFN
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
的 long-name 和 SCOOTE~1.TXT
的 short-name ( note :简短-NAME在此阶段已经到位)。另外,目录SFN
包含一个称为 SCOOTE~1.TXT
的文件 - 因为此名称以8.3格式"拟合",所以它没有单独的短名称。
如果我们现在尝试将此文件复制到当前目录中,因为复制文件的简短/唯一名称匹配已经存在的文件的短名称,则提示有关覆盖的提示:
c:Test> copy "SFNSCOOTE~1.TXT"
Overwrite c:TestSCOOTE~1.TXT? (Yes/No/All): n
0 file(s) copied.
单件固定
as eryksun 建议,您可以使用 fsutil file setshortname
命令通过更改当前目录中的文件的 short-name 来解决一次性冲突:
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 "SFNSCOOTE~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
命令使用到 emove 一次:
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:UsersxxxxxxxxAppDataLocalTemp8dot3_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 "SFNSCOOTE~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
NOTE :此命令的第一阶段 - Scanning registry...
- 可能需要一些时间,因为它通过注册表查找对即将删除的8.3 format名称的参考。有关此命令的更多详细信息,请参见fsutil 8dot3name strip /?
。
谨慎(适用于两种方法))
fsutil 8dot3name strip /?
命令的帮助:
此命令永久从您的卷中删除8DOT3文件名。它 将列出指向剥离的8dot3names的注册表键,但 不会修改受影响的注册表键。剥离不会 在完整路径名的文件上执行比最大路径更长的文件 长度为260个字符。
这两个命令都修改(或删除)所选文件的8.3格式名称。如果您对相关文件有任何参考(在注册表,配置文件或.BAT
文件等中的其他位置等),则这些引用将不再有效。使用任何一种解决方案,请谨慎。