Você sempre pode tentar usar o comando for
com os modificadores de parâmetro. Se os arquivos tiverem um nome de arquivo curto, o seguinte comando deverá funcionar quando digitado na caixa de diálogo Executar ou na linha de comando:
cmd /c for %F /d /r in ("input\*.*") do @xcopy /i "%~F" "temp%~spF%~snF%~xF"
Substitua input
pelo nome da sua pasta real, é claro. Isso colocará todos os nomes de arquivos curtos no temp
, mas dentro de uma ou mais outras pastas. Simplesmente continue abrindo as pastas até chegar à pasta input
, renomeie-a para o nome que você quiser chamá-la e mova-a para onde desejar. Em seguida, exclua a pasta temp
.
Se você não tiver nomes de arquivo curtos, terá que gerá-los você mesmo. Usando o seu método preferido, copie todo o seu arquivo da pasta de entrada para o destino. Em seguida, copie e cole o seguinte no Notepad:
@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%"
Salve como "8dotX.bat" (incluindo as aspas). Para executá-lo, arraste a pasta copiada para ela e todos os arquivos e pastas nela serão renomeados.
Note que isso não está 100% completo, pois nomes de arquivos que já são curtos ainda serão renomeados e o sinal de igual (=) não será substituído por _ como seria no DOS. O primeiro é porque manipulá-lo corretamente faria com que o arquivo de lote demorasse pelo menos duas vezes mais tempo para ser concluído, e o último é porque não pode ser feito no BATCH puro. Ele também é limitado a apenas 9999 arquivos com as mesmas letras iniciais e não se preocupa em alterar os nomes dos arquivos para maiúsculos. Acho que essas limitações ainda funcionarão com o seu caso de uso.