Вопрос не очень понятен.Итак, я начну с примера:
Каталог U:\clients\source
содержит каталоги и файлы:
- архив
- SampleFileName.file__01-02-2019_22-35-11-444_A
- SampleFileName2.file_19-04-2019_20-35-56-676_A
- архив
- SampleFileName2.file_19-04-2019_20-35-56-676_A
Каталог X:\SaveHere
должен содержать после выполнения пакетного файла:
- SampleFileName.file
- SampleFileName2.file ... предпочтительнее из каталога
archive
.
One из множества возможных решений для этой задачи копирования файлов использует циклы:
@echo off
for %%I in ("SampleFileName.file" "SampleFileName2.file") do (
for %%J in ("U:\clients\source\archivestore" "U:\clients\source\archive") do (
for %%K in ("%%~J\%%~I_*") do copy /Y "%%K" "X:\SaveHere\%%~I" >nul
)
)
Самый внешний FOR выполняется два раза в секунду FOR с первым "SampleFileName.file"
и секунда "SampleFileName2.file"
присвоены переменной цикла I
.
Вторая FOR запускает два раза третий FOR с первым "U:\clients\source\archivestore"
и вторым "U:\clients\source\archive"
назначено для цикла variable J
.
Итак, третий FOR выполняется в общей сложности четыре раза с шаблонами подстановочных знаков:
"U:\clients\source\archivestore\SampleFileName.file_*"
"U:\clients\source\archive\SampleFileName.file_*"
"U:\clients\source\archivestore\SampleFileName2.file_*"
"U:\clients\source\archive\SampleFileName2.file_*"
Третий FOR ищет не скрытые файлы, соответствующие текущему шаблону подстановочного знакаи запускает команду COPY для каждого найденного файла.
Команда COPY копирует файл, найденный третьей FOR , в каталог X:\SaveHere
с целевым файломимя, определенное первым FOR , назначенным в настоящее время его переменной цикла I
с перезаписью возможно уже существующего файла с таким же именем в X:\SaveHere
.
Еще один решение использует только два FOR :
@echo off
for /R "U:\clients\source\" %%I in ("SampleFileName*.file_*") do (
for /F "eol=| delims=_" %%J in ("%%~nxI") do copy /Y "%%I" "X:\SaveHere\%%J" >nul
)
Первый FOR ищет рекурсив в каталоге U:\clients\source
и во всех его подкаталогах для файлов, соответствующих шаблону SampleFileName*.file_*
и присваивает найденное имя файла с полным путем переменной цикла I
перед выполнением второго FOR .
Второй FOR обрабатывает как строку только имя файла с расширением файла без пути.Он разделяется на строку с именем файла на подстроки, используя подчеркивание в качестве разделителя строк.Только первая строка, разделенная символом подчеркивания, присваивается переменной цикла J
, например, один раз SampleFileName.file
и дважды SampleFileName2.file
.Затем второй FOR запускает команду COPY , чтобы скопировать файл с автоматически усеченным именем конечного файла на основе первого подчеркивания в имени исходного файла.
Это решение не работает, еслив имени файла есть знак подчеркивания, оставленный до даты / времени.
Недостатком этого решения является то, что порядок файлов, найденных более одного раза в дереве каталогов U:\clients\source
, не определяется кодом пакетного файла,но файловой системой, которая возвращает имена файлов, соответствующие шаблону первого цикла FOR .
Прочитайте статью Microsoft о Использование операторов перенаправления команд для объяснения >nul
.
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.