Пакетный скрипт для копирования/зеркала определенных файлов

Во-первых, я новичок, извините, если это простая задача. У меня есть папка, содержащая только файлы PDF, и мне нужно копировать только файлы, содержащие определенный текст [этот текст меняется, но начало всегда одинаково], например

  • test_variablename_datestamp.PDF.
  • test_variablename_datestamp.PDF.
  • образец_имя_переменной_отметка даты.PDF.

Я хотел бы скопировать любой файл, который начинается с теста, в тестовую папку и, таким образом, тестировать в тестовую папку и образец в тестовую папку. Я планирую, чтобы этот скрипт запускался каждые 30 минут, поэтому его нужно копировать только в том случае, если файл изменился [это должно уменьшить объем копирования, который он должен выполнять]

Я новичок в пакетном написании скриптов, но сегодня попробую.

Заранее спасибо Дж


person Hoube78    schedule 21.02.2015    source источник


Ответы (3)


Вы можете использовать * в качестве подстановочного знака для перемещения нужных файлов.

@echo off
pushd "C:\pdf_files"
copy test_*.pdf "C:\test_files"
copy testing_*.pdf "C:\testing_files"
copy sample_*.pdf "C:\sample_files"
popd

Очевидно, замените пути теми, которые вы используете.

person SomethingDark    schedule 21.02.2015

Это должно уменьшить количество ненужных копий:

@echo off

rem -- set folder paths WITHOUT ending slash
set pdf_folder=c:\pdfs
set test_folder=c:\tests
set testing_folder=c:\tests
set sample_folder=c:\sample


pushd %pdf_folder%

 rem -- COPY the non-existing in target folder files
 echo n|copy /-y test_*.pdf %test_folder%\
 echo n|copy /-y test_*.pdf %testing_folder%\<n
 echo n|copy /-y sample_*.pdf %sample_folder%\<n


 rem -- UPDATE only modified files
 replace test_*.pdf %test_folder% /u
 replace testing_*.pdf %testing_folder% /u
 replace sample_*.pdf %sample_folder% /u

popd
person npocmaka    schedule 21.02.2015

@ECHO OFF
SETLOCAL
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir\t w o"
SET "destdir=U:\destdir"
FOR /f "tokens=1*delims=_" %%a IN (
 'dir /b /a-d "%sourcedir%\*_*.pdf" '
 ) DO IF NOT EXIST "%destdir%\%%a\%%a_%%b" (
  ECHO(MD "%destdir%\%%a"
  ECHO(COPY "%sourcedir%\%%a_%%b" "%destdir%\%%a\%%a_%%b"
)
GOTO :EOF

Вам нужно будет изменить настройки sourcedir и destdir в соответствии с вашими обстоятельствами.

Требуемые команды MD просто ECHOed для целей тестирования. Убедившись, что команды верны, измените ECHO(MD на MD, чтобы фактически создать каталоги. Добавьте 2>nul, чтобы подавить сообщения об ошибках (например, когда каталог уже существует)

Требуемые команды COPY просто ECHOed для целей тестирования. После проверки правильности команд измените ECHO(COPY на COPY, чтобы действительно скопировать файлы. Добавьте >nul, чтобы скрыть отчетные сообщения (например, 1 file copied)

Процесс считывает каждое имя файла из списка каталогов в базовой форме (/b), подавляя записи каталога (/a-d) всех файлов, соответствующих *_*.pdf, назначая токен перед первым _ на %%a, а остальные на %%b.

Если имя целевого файла не существует, создайте подкаталог %%a в целевом каталоге, затем скопируйте файл.

Если вы хотите копировать независимо, удалите предложение if not exist..., но сохраните закрывающую скобку в этой физической строке.

person Magoo    schedule 21.02.2015