Eu estou usando o Windows 8 e eu queria saber se é possível mesclar pastas que contêm arquivos com o mesmo nome, mas em vez de substituí-los, alterando o nome.
Por exemplo:
Folder A, with files 01, 02, and 03
Folder B, with files 01, 02, and 03
Eu quero que o resultado seja
Folder C (or any name) with:
Files 01(A01), 02(A02), 03(A03), 04(B01), 05(B02) and 06(B03)
Todos estes sendo os arquivos os mesmos que estavam nas pastas A e B, e também cuidando que a ordem seja a mesma.
windows
windows-8
file-management
sebastianhrp
fonte
fonte
01
,02
,03
, ... (com oA
arquivos recebendo o menor n números), independentemente dos nomes dos arquivos originais? Porque pode ser mais útil a longo prazo para ir com umA-01
,A-02
,A-03
,A-antelope
,A-buffalo
,A-cat
,A-dog
...B-01
... esquema.Respostas:
Use o seguinte script (arquivo em lotes):
Notas:
setlocal enabledelayedexpansion
permite o tratamento especial de variáveis em loops.for %%S in (a b) do …
executa o seguinte grupo de instruções uma vez para cada valor entre parênteses, com%%S
definido para o valor. Eu escolhi a cartaS
por isso, porque estes são os s diretórios de origem. Você pode colocar tantos diretórios de origem entre parênteses quanto desejar.for /f "delims=" %%F in ('…') do …
executa o seguinte grupo de instruções uma vez para cada linha de saída do comando no'…'
citações, com%%F
definido para a linha. Eu escolhi a cartaF
por isso, porque estes são os f ile nomes.dir %%S /b/a-d/one
dá um b são (sem cabeçalho, datas, tamanhos, etc.) dos arquivos no diretório de origem%%S
./a-d
significa listar apenas arquivos (sem diretórios);/one
significa o order (sort) as entradas por n ame e e extensão.set /a counter=counter+1
é autoexplicativo.move
comando, mover o arquivo (%%F
) a partir do diretório de origem (%%S
) para o diretório de destino.!counter:~1!
é uma forma do% variável : ~ começar , comprimento %
sintaxe, tomando a substring docounter
variável do segundo caractere (porque o primeiro caractere é # 0) até o final. Então secounter
está percorrendo os valores 1001, 1002, 1003,…, então esta subseqüência é 001, 002, 003 etc. Se tiver certeza de que você tem menos de 100 arquivos, você pode alterar a inicialização decounter
para 100. E%%~xF
é a extensão do%%F
nome do arquivo.Isso move todos os arquivos no
a
eb
diretórios. Se você quiser ter tudo noa
eb
árvores de diretórios, altere o loop interno para/s
aodir
comando torna recursivo.dir directory_name / b
dá apenas nomes de arquivos,dir directory_name / b / s
dá-lhe caminhos completos então omove
comando não precisa incluir o%%S
diretório de origem.Mais notas:
Isso manipulará nomes de diretórios com espaços neles - apenas os cite:
Claro que você deve testar isso primeiro com
move
mudou paraecho move
.fonte