Copie arquivos com estrutura de pastas original, mas para o formato 8.3

0

Eu tenho uma pasta com muitos arquivos e pastas dentro dela.

Eu gostaria de copiar isso para outro local, então o resultado é uma pasta com a mesma estrutura de arquivos e pastas, mas com todos os arquivos no formato 8.3.

Como fazer isso?

PS: Bem, alguns arquivos têm extensões com mais de 3 caracteres (ex home.sh3d, windows.theme etc.), então quando eu digo sobre transformar todos os nomes de arquivos para 8.3 eu gostaria de dizer sobre transformá-los em um 8 Formato .X (ou seja, para não alterar as extensões).

    
por kokbira 21.06.2012 / 16:48

2 respostas

1

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.

    
por 16.04.2014 / 09:31
2

ROBOCOPY permitirá que você especifique o sinalizador /FAT para o destino que usará nomes de arquivo 8.3. Não tenho certeza de como isso funcionará com extensões mais longas. Mas é apenas uma cópia, por isso não vai doer para experimentar.

link

    
por 21.06.2012 / 17:15

Tags