Copie e cole um arquivo 200 vezes com novos nomes

3

Eu tenho uma pasta com um arquivo chamado: 'template.xlsx' e centenas de arquivos nomeados:

  • old_2301 Item 1.xlsx
  • old_2014 Item 2.xlsx
  • old_5321 Item 3.xlsx
  • ...
  • old_3212 Item 200.xlsx

Eu quero copiar o arquivo template.xksx e criar 200 novos arquivos:

  • 2301 Item 1.xlsx
  • 2014 Item 2.xlsx
  • 5321 Item 3.xlsx
  • 3212 Item 200.xlsx

Eu tentei algo como:

Na pasta, digite Shift + shift direito: selecione "abrir janela de comando aqui"

for %a in (*.*) do copy "template.xlsx" ... ren ...?

Eu quero renomear os arquivos template.xlsx copiados para o mesmo nome dos outros arquivos, mas com old_ recortado.

Existe uma maneira simples de fazer isso?

    
por Stewie Griffin 22.08.2017 / 11:43

3 respostas

10

Desejo copiar template.xlsx para o nome dos outros arquivos, com old_ removido

Use o seguinte arquivo em lotes:

@echo off
setlocal enabledelayedexpansion
rem get list of file names
for /f "usebackq tokens=*" %%i in ('dir /b old_*.xlsx') do (
  rem save the filename
  set _name=%%i
  rem remove old_ from the name
  set _name=!_name:old_=!
  rem do the copy to the modified name
  copy "template.xlsx" "!_name!"
  )
endlocal

Leitura Adicional

por 22.08.2017 / 12:06
6

Você tem que usar os arquivos chamados old_* como sua fonte de nome e dividir no sublinhado.

@Echo off
For /f "tokens=1* delims=_" %%A in (
    'Dir /B /A-D "old_* Item *.xlsx"'
) Do Echo Copy template.xlsx "%%B"

Se a saída parece OK, remova o eco na frente da cópia.

Explicando a análise das opções / f:

filename  old_2301 Item 1.xlsx
delims       _
tokens     1 _ * (rest)
for var   %%A %%B

Uma variante para a linha de comando sem lote:

For /f "tokens=1* delims=_" %A in ('Dir /B /A-D "old_*.xlsx"') Do Copy template.xlsx "%B"
    
por 22.08.2017 / 12:01
4

A menos que eu realmente quisesse um programa que eu pudesse executar várias vezes, se isso fosse apenas um ou poucos, usaria o Notepad ++ ou qualquer outro editor de texto com copiar e colar em bloco. Abra um prompt de comando no diretório relevante e digite dir/b > 1.txt , o que resulta em, por exemplo:

D:\MiscJunk>type 1.txt
1.txt
old_2014 Item 2.txt
old_2301 Item 1.txt
old_5321 Item 3.txt
template.txt

Edite o arquivo 1.txt no Notepad ++ e adicione quantas dessas linhas forem necessárias:

copy template.txt ""
copy template.txt ""
copy template.txt ""

Bloquear cópia (teclas de seta Alt Shift) no texto:

2014 Item 2.txt
2301 Item 1.txt
5321 Item 3.txt

e cole-o entre aspas:

copy template.txt "2014 Item 2.txt"
copy template.txt "2301 Item 1.txt"
copy template.txt "5321 Item 3.txt"

Depois de verificar se os comandos estão corretos e se ajustando adequadamente, basta copiar e colar esses comandos de volta no prompt de comando, resultando em:

D:\MiscJunk>dir/b
2014 Item 2.txt
2301 Item 1.txt
5321 Item 3.txt
...

Este método é ultra-simples, sem necessidade de depuração, e há muito pouco que pode dar errado. Bater em blocos de comandos no Notepad ++ é algo que faço regularmente.

    
por 22.08.2017 / 16:18