Пакетный или VB Script для копирования журналов из нескольких каталогов в один каталог и переименования, чтобы избежать конфликтов - PullRequest
1 голос
/ 19 октября 2011

Надеюсь, вы можете помочь. Я пытаюсь решить эту проблему в течение недели, но никуда не денусь и не могу собрать воедино то, что мне нужно! - Мои навыки написания сценариев далеко не велики, поэтому, пожалуйста, прости мою наивность! Хорошо, проблема ...... У меня есть сервер IIS с несколькими сайтами, которые все сохраняют свои журналы в отдельном каталоге, мне нужно скопировать журналы за последние 24 часа в локальный каталог на моем компьютере, чтобы я мог проанализировать их в Log Parser Lizard (GUI Version) на ежедневной основе. Я могу подключить диск с удаленного сервера к моей локальной машине через аппаратную VPN, так что это немного облегчает задачу. С помощью команды forfiles я могу прокрутить каталоги, чтобы найти журналы, которые существуют только за день, а с помощью copy / xcopy / или Robocopy я могу задать команду для копирования. Моя проблема в том, что все журналы IIS имеют одинаковые имена, поэтому моя команда копирования просто перезаписывает предыдущий файл, а не создает новый файл. Я попытался использовать параметр% random% для имени файла, но при этом снова создается один случайный файл, который перезаписывается следующим файлом, сохраняя то же имя, а не создавая множество файлов со случайным именем в одном каталоге. Я знаю, что команды Log Parser включают recurse, который я успешно использовал, однако формат журнала немного изменился, и ящерица GUI не может прочитать данные внутри, так что это не решение. Мой код в его нынешнем виде показан ниже, а IP-адреса изменены по понятным причинам. Любая помощь будет принята с благодарностью!

@ эхо выключено

NET USE Q: / Удалить / да

NET USE Q: \ 255.255.255.255 \ D $ \ Logs

cd C:

RD / S / Q C: \ Weblogs \ Production

MD C: \ Weblogs \ Production

forfiles.exe / p Q: \ / s / m * .log / d 0 / c "cmd / c robocopy / S / XC / XN / XO @file C: \ Weblogs \ Production \% random% .log «

NET USE Q: / delete

выход

1 Ответ

0 голосов
/ 19 октября 2011

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

Вам нужно будет либо использовать в FORFILES некоторые уникальныеИдентификатор, возможно объединение @RELPATH и @FNAME может работать для вас, если у вас есть только одна глубокая рекурсия уровня.

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

Редактировать: посмотрите этот простой пример кода, чтобы начать работу

@ECHO off
SETLOCAL enabledelayedexpansion
SET destdir=C:\LOGS
SET count=%RANDOM%
FOR /R %%A IN (*.log) DO (
  SET /A count += 1
  @ECHO COPY %%A !destdir!\%%~nA.!count!.log
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...