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