Программа или скрипт для обхода структуры каталогов на основе моего цикла

270
vixbix

У меня следующий цикл, и я хотел бы помочь с расширением его функциональности.

for /D %d in (*.*) do "c:\Program Files (x86)\7-Zip\7z.exe" a -tzip "%d.zip" ".\%d\*" 

В настоящее время в структуре каталогов, таких как ниже:

Лог-файлы> Год> Месяц> День> Часы

Я вручную перехожу к каталогу « День», выполняю цикл «для» в командной строке Windows, и мой цикл создает сжатые каталоги каждого каталога « Час » в выбранный день . Затем я вручную перехожу к следующему дню и повторяю до тех пор, пока я не заархивировал весь месяц .

Средой является Server 2003, я могу использовать ТОЛЬКО командную строку (без PowerShell или области для установки) и не могу использовать сторонние «решения».

Q1: Могу ли я автоматизировать это, например, на уровне месяца или даже года, сохранив почтовый индекс ЧАСЫ, поскольку в этом весь смысл ...?

Вопрос 2: В настоящее время я переносил заархивированные почасовые файлы в холодное хранилище вручную - структура каталогов в месте назначения немного отличается от структуры в источнике. Есть ли возможность автоматизировать это?

Заранее спасибо за ваши предложения

1
В каком формате имена ваших каталогов? DavidPostill 7 лет назад 0
например, AppLogs> 2016> 01> 24> 17 означает 17:00 часов 24 января 2016 vixbix 7 лет назад 0
«В настоящее время я переносил заархивированные почасовые файлы в холодное хранилище вручную - структура каталогов в месте назначения немного отличается от структуры в источнике» Что такое структура каталогов холодного хранения? DavidPostill 7 лет назад 0
Хорошо, например, так: `C: \ SomeApp \ SubDir1 \ SubDir2 \ SubDir3 \ LogFiles \ 2016` будет содержать годичные ежемесячные исходные каталоги, каждый со своими днями, и каждый день с ** сейчас ** часами в сжатом виде ПЛЮС оригинальные каталоги, в которых есть файлы журналов. `X: \ SomeVM \ SomeApp \ LogFiles \ 2016` - это место, куда я хотел бы создавать и хранить только zip-файлы в соответствии с их правильной ежемесячной и ежедневной структурами. vixbix 7 лет назад 0

1 ответ на вопрос

0
DavidPostill

Q1: Могу ли я автоматизировать это, например, на уровне месяца или даже года

сохраняя ЧАСЫ молнии, как в этом весь смысл ...?

Способ автоматизировать это - использовать вложенные forциклы.

Решение ниже для уровня месяца. Используйте тот же подход с другим уровнем вложенности для решения на уровне года.

Запустите следующий пакетный файл (RecurseDays.cmd) в выбранной вами папке Месяц:

@echo off rem start in a month folder and loop through the days for /d /r %%d in (*) do ( rem for each day, change directory to the day pushd %%d rem loop through the hours for /d %%h in (*) do ( rem zip the hour echo "c:\Program Files (x86)\7-Zip\7z.exe" a -tzip "%%h.zip" ".\%%h\*" ) rem done with the day, change directory back to the month popd ) 

Заметки:

  • Удалите echoиз 7zкоманды, когда вы счастливы, что пакетные файлы, как ожидалось.

Q2: в настоящее время я переносил заархивированные почасовые файлы в холодное хранилище вручную

структура каталогов в месте назначения немного отличается от структуры в источнике. Есть ли возможность автоматизировать это?

Вы могли бы использовать robocopy. Правильное место будет сразу после:

 rem done with the day, change directory back to the month 

Здесь вы можете перенести все часовые файлы за все дни месяца, в котором вы находитесь. Это robocopyсохранит структуру каталогов, а также имеет возможность перемещать zip-файлы, если вы этого хотите (вместо того, чтобы просто копировать их).

Смотрите ссылку ниже для получения дополнительной информации.

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

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • for / d - условно выполнить команду на несколько каталогов / папок.
  • pushd - изменить текущий каталог / папку и сохранить предыдущую папку / путь для использования командой POPD.
  • popd - изменить каталог обратно на путь / папку, которая была сохранена последней командой PUSHD.
  • robocopy - надежное копирование файлов и папок.
Работал почти идеально - мне пришлось настроить последний аргумент zip с `" %% h \ * "` на `". \ %% h \ * "`, поэтому я не получил каталог внутри zip-файла с таким же именем , Спасибо за помощь в решении Q1 так эффективно! vixbix 7 лет назад 0
@vixbix Ах. Мне было интересно, почему у вас там ``. \ ``. Я думал, что это не нужно, поэтому я удалил его. DavidPostill 7 лет назад 0
@vixbix Ответ обновлен по адресу Q2. DavidPostill 7 лет назад 0

Похожие вопросы