Пакетный файл перемещения файлов по дате с циклом - PullRequest
0 голосов
/ 20 марта 2019

мы пытаемся использовать пакетный файл для перемещения документов в определенные подкаталоги. Все файлы начинаются с формата даты: mmddyyyy_filename. Наша структура папок выглядит следующим образом: c: \ client \ user \ year \ month. Все файлы загружаются в каталог c: \ client \ user. Оттуда мы должны отсортировать файлы в соответствующий год, а затем в соответствующие месяцы. В некоторых из этих каталогов будет более 10000 файлов, поэтому выполнение этого вручную занимает очень много времени. Мы создали пакетный файл, который позволяет нам устанавливать переменную для клиента, пользователя, года и месяца, но мы хотели бы по возможности циклически проходить месяц и год, если это возможно. Текущий пакетный файл выглядит так:

@echo off

:client
set /p client= Which client?

:Provider
set /p provider= Which provider (First initial, last name)?
/k if %provider% == clean GOTO Cleanup
/k if %provider% == x GOTO client
/k if %provider% == *. * GOTO Year

:Year
set /p year= Which year (4 digit year)?
if %year% neq 2019 GOTO Month
if %year% == 2019 GOTO provider

:Month
set /p month= Which month (2 digit number)?
if %month% neq 13 GOTO Command
if %month% == 13 GOTO Year

:Command
E:
cd E:\Backups\"%client%"\"%Provider%"\
move %month%??%year%_* E:\Backups\"%client%"\"%Provider%"\%year%\%month%
GOTO Month

:Cleanup
ROBOCOPY "E:\Backups\%client%" "E:\Backups\%client%" /S /MOVE
GOTO client

Вместо того, чтобы вводить месяцы по отдельности, 01, 02, 03 и т. Д., Мы бы хотели, чтобы он проходил по каждому из этих месяцев без какого-либо участия пользователя. В идеале это будет проходить через 2007-2018 годы. В настоящее время, когда мы набираем месяц 13, он возвращает нам приглашение на Год, когда мы вводим 2019, он возвращает нас на приглашение провайдера.

Любая помощь в достижении этого была бы великолепна!

1 Ответ

0 голосов
/ 21 марта 2019

Возможно, это не сработает, как ожидалось, потому что ваши примеры не завершены, но это для демонстрации того, что вы в значительной степени просили.

Он запросит задачу (какие задачи вы хотите выполнить), где я использовал move и clean в качестве примеров. Задайте вопрос провайдеру и клиенту. Цикл будет выполняться каждый год, и каждый месяц этого года вы можете добавлять / удалять по своему усмотрению.

@echo off
set "mm=01 02 03 04 05 06 07 08 09 10 11 12"
set "yyyy=2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019"
set /p "task=enter task (clean, move): "
set /p "client=Which client?: "
set /p "provider= Which Provider? (Initial, Lastname): "
if "%task%"=="clean" (
     echo robocopy "E:\Backups\%client%" "E:\Backups\%client%" /S /MOVE
  )
)
if /i "%task%"=="move" (
for %%a in (%yyyy%) do for %%i in (%mm%) do (
      echo mkdir "E:\Backups\%client%\%provider%\%%a\%%i" 2>nul
      echo move %%i??%%a_* "E:\Backups\%client%\%provider%\%%a\%%i"
  )
)

Примечание !! выше просто echo команды внутри цикла в качестве более безопасной функции, удаление echo команды будет выполнять реальные задачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...