3

У меня есть папка с файлом с именем: 'template.xlsx' и сотнями файлов с именем:

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

Я хочу скопировать файл template.xksx и создать 200 новых файлов:

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

Я пробовал что-то вроде:

В папке наберите Shift+Right shift: выберите «открыть окно команд здесь»

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

Я хочу переименовать скопированные файлы template.xlsx в то же имя, что и другие файлы, но с old_ .

Есть ли простой способ сделать это?

3 ответа3

10

Я хочу скопировать template.xlsx на имя других файлов, с удаленным old_

Используйте следующий пакетный файл:

@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

Дальнейшее чтение

6

Вы должны использовать файлы с именем old_* качестве источника имени и разделить их подчеркиванием.

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

Если вывод выглядит нормально, удалите эхо перед копией.

Объяснение разбора для параметров /f:

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

Вариант для командной строки без пакета:

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

Если бы я на самом деле не хотел программу, которую мог бы запускать снова и снова, если бы это была разовая или несколько раз, я бы использовал Notepad++ или любой другой текстовый редактор с блоком копирования и вставки. Откройте командную строку в соответствующем каталоге и введите dir/b > 1.txt , что приведет, например, к следующему:

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

Отредактируйте 1.txt в Notepad++ и добавьте столько строк, сколько необходимо:

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

Блок копирования (клавиши со стрелками Alt Shift) текста:

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

и вставьте его между кавычками:

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

Затем, после проверки правильности команд и соответствующей корректировки, просто скопируйте и вставьте эти команды обратно в командную строку, в результате чего:

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

Этот метод очень прост и не требует отладки, и мало что может пойти не так. Сборка блоков команд в Notepad++ - это то, что я делаю довольно регулярно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .