Назад | Перейти на главную страницу

Robocopy: как копировать активы из нескольких мест в одно и вести журнал

У меня есть несколько папок, содержащих активы (в каждой папке есть подпапки, содержащие эти активы .mp3, .txt, .png и т. Д.). Я хочу скопировать все эти активы вместе с подпапкой в ​​одно место / папку. Мне удалось успешно запустить команду robocopy для копирования ресурсов вместе с подпапками из одной папки в другую:

цель / с источника robocopy

Я буду запускать планировщик один раз в день для копирования ресурсов. Также я хотел сохранить имена всех скопированных ресурсов в файле журнала. Имя файла журнала должно быть в виде

log_currentDate.txt

например, если сегодняшняя дата - 20 октября 2015 года ... имя файла журнала должно быть:

log_20151020.txt

На следующий день, т.е. 21 октября 2015 г., должно быть:

log_20151021.txt

Этот файл журнала должен содержать имена всех скопированных ресурсов 20 октября 2015 года, 21 октября 2015 года и так далее. Я создал пакетную команду (спасибо @DavidPostill) для создания следующего журнала:

@echo off
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (
set _date=%%a%%b%%c
)
echo robocopy source target /log:D:\ABC\log%_date%.txt

Это создает журнал с именем «logTue2010.txt» (т.е. в формате logdayddmm). Проблема:

  1. Где хранится этот файл журнала? Чтобы сделать этот файл журнала видимым, я должен каждый день писать отдельную команду:

Исходная цель robocopy /log:D:\ABC\logWed1021.txt / tee / s

  1. Как я могу гарантировать получение отдельной копии журнала каждый день?
  2. Также с текущей командой файл журнала содержит весь вывод, отображаемый в окне cmd. Я просто хочу, чтобы он содержал имя актива с его расширением.

РЕДАКТИРОВАТЬ: Согласно @JosefZ я отредактировал свой командный файл следующим образом:

@echo off
for /f "tokens=2 delims==" %%G in ('wmic OS get LocalDateTime /value') do set "_date=%%G"
set "_date="%_date:~0,8%
echo robocopy source target /log:D:\ABC\log\log_%_date%.txt
robocopy source target /log:D:\ABC\log\log_%_date%.txt /S

Я получил следующий вывод:

D:\ABC>D:\ABC\copy1.bat
robocopy source target /log:D:\ABC\log\log_.txt
Log File : D:\ABC\log\log_.txt

Получить YYYYMMDD-форматированная дата независимо от локали и региональных настроек с использованием for /F петля против wmic (Команда инструментария управления Windows) и подстрока переменной окружения:

@echo off
for /f "tokens=2 delims==" %%G in ('wmic OS get LocalDateTime /value') do set "_date=%%G"
set "_date=%_date:~0,8%"

Есть еще robocopy параметры ведения журнала:

            /L : List only - don’t copy, timestamp or delete any files.
           /NP : No Progress - don’t display % copied.
      /unicode : Display the status output as Unicode text.   #
     /LOG:file : Output status to LOG file (overwrite existing log).
  /UNILOG:file : Output status to Unicode Log file (overwrite)
    /LOG+:file : Output status to LOG file (append to existing log).
 /UNILOG+:file : Output status to Unicode Log file (append)
           /TS : Include Source file Time Stamps in the output.
           /FP : Include Full Pathname of files in the output.
           /NS : No Size - don’t log file sizes.
           /NC : No Class - don’t log file classes.
          /NFL : No File List - don’t log file names.
          /NDL : No Directory List - don’t log directory names.
          /TEE : Output to console window, as well as the log file.
          /NJH : No Job Header.
          /NJS : No Job Summary.
robocopy B Bcopy /log:D:\ABC\log\log_%_date%.txt /S /NP /NDL /NJH /NJS /NS /NC 

Команда выше (примечание /NP /NDL /NJH /NJS /NS /NC переключатели) подавит почти все, кроме (полных) имен файлов в robocopy вывод. Однако имена файлов имеют отступ Вкладка и Космос персонажи. Следующий фрагмент кода должен вывести нужный результат:

>D:\ABC\log\log_%_date%.txt (
for /f "tokens=*" %%G in ('
    robocopy B Bcopy /S /NP /NDL /NJH /NJS /NS /NC
  ') do echo(%%G
)

Для > объяснение, см. перенаправление. И файл журнала сохраняется в указанной папке (D:\ABC\log\); чтобы убедиться в этом, попробуйте

type D:\ABC\log\log_%_date%.txt