复制具有原始文件夹结构的文件,但格式为 8.3

复制具有原始文件夹结构的文件,但格式为 8.3

我有一个文件夹,里面有很多文件和文件夹。

我想将其复制到另一个位置,以便结果是一个具有相同文件和文件夹结构的文件夹,但所有文件均为 8.3 格式。

怎么做?

PS:嗯,有些文件的扩展名超过 3 个字符(例如 home.sh3d、windows.theme 等),所以当我说将所有文件名转换为 8.3 时,我想说将它们转换为 8.X 格式(即,不要更改扩展名)。

答案1

您始终可以尝试使用for带有参数修饰符的命令。如果文件的文件名很短,则在“运行”对话框或命令行中输入以下命令应该有效:

cmd /c for %F /d /r in ("input\*.*") do @xcopy /i "%~F" "temp%~spF%~snF%~xF"

当然,用您的真实文件夹名称替换input。这会将所有短文件名放在 中temp,但位于一个或多个其他文件夹内。只需继续打开文件夹,直到找到该input文件夹​​,将其重命名为您想要的任何名称,然后将其移动到您想要的位置。然后删除该temp文件夹。

如果您没有任何短文件名,则必须自己生成。使用您喜欢的方法,将所有文件从输入文件夹复制到目标文件夹。然后将以下内容复制并粘贴到记事本中:

@echo off
cd "%~1"
for /r /d %%F in (*.*) do call :START "%%~F"
for /r %%F in (*.*) do call :START "%%~F"  
pause
GOTO :EOF

:START
setlocal
set path=%~d1%~p1
set name=%~n1
set ext=%~x1
set short=%name: =%
set short=%short:.=%
set short=%short:~0,6%
set short=%short:,=_%
set short=%short:[=_%
set short=%short:]=_%
set short=%short:+=_%

:LOOP
set /a num += 1 
if /i %num% GEQ 10 set short=%short:~0,5%&& echo +10
if /i %num% GEQ 100 set short=%short:~0,4%&& echo +100
if /i %num% GEQ 1000 set short=%short:~0,3%&& echo +1000
if exist "%path%%short%~%num%%ext%" GOTO LOOP
move "%~1" "%path%%short%~%num%%ext%" 
echo "%path%%short%~%num%%ext%"

将其保存为“8dotX.bat”(包括引号)。要运行它,请将复制的文件夹拖到它上面,其中的所有文件和文件夹都将被重命名。

请注意,这并非 100% 完成,因为已经很短的文件名仍将被重命名,并且等号 (=) 不会像在 DOS 中那样被 _ 替换。前者是因为正确处理它将使批处理文件至少需要两倍的时间才能完成,后者是因为它不能在纯批处理中完成。它也仅限于具有相同首字母的 9999 个文件,并且不会费心将文件名更改为大写。我认为这些限制仍然适用于您的用例。

答案2

ROBOCOPY将允许您为将使用 8.3 文件名的目标指定/FAT标志。我不确定它如何处理较长的扩展名。但这只是一个副本,因此尝试一下也无妨。

http://ss64.com/nt/robocopy.html

相关内容