Войти

Показать полную графическую версию : Автоматизация (поэтапное перемещения файлов) между двумя директориями


alexey_vf
22-12-2010, 14:34
Уважаемые коллеги просьба дать наводку или подсказать как решить задачу с помощью простого bat-файла. Потратил кучу времени за книгами и в поисковиках но безрезультатно.
Задача:
Есть две директории:
\Input
\Out

В директории Input много подкаталогов и очень много файлов (книг).

Требуется: с сохранением структуры директорий и имен файлов переместить один файл, лучше первый найденный, из директории \Input в директорию \Out.

Использовать Xcopy, ForFiles, RoboCopy у меня за 2 дня не получилось, поскольку для них нужно задать либо всю директорию, либо имена файлов (список).
Т.е. Использовать можно, как я понял For /, Copy, Move.
Простейшее рабочее решение что я сделал: для For / с выходом из цикла после обработки первого файла... но оно сделано только для одной директории (пример):
@echo off
rem Переменные From To
@set FromDir="D:\geolib\ig_and_hg\tiff_not_processed\"
@set ToDir="D:\geolib\ig_and_hg\realtime_processing\"

rem Если файл хоть один есть в директории выходим из программы
if exist %ToDir%*.tif goto :ending

:moving
rem Ищем все tif-ы перемещаем первый, а затем выходим.
FOR %%x in (%FromDir%*.tif) do (
move /Y "%%x" %ToDir%
echo File %%x moved is OK.
exit
)
:ending




P.S. Такая дурацкая задача нужна для подсовывания последнему FineReaderу файлов по одному, поскольку он стал ужасно глючным.

Заранее благодарен за любую подсказку.

kiripanda
22-12-2010, 19:09
Попробуй
for /f "delims=" %%x in ('dir /a-d/b/s "%FromDir%*.tif"') do (
*не проверял

alexey_vf
22-12-2010, 20:21
for /f "delims=" %%x in ('dir /a-d/b/s "%FromDir%*.tif"') do (

Это скорее для пакетной обработки файлов, а как тогда выйти из операции после обработки первого файла из из всех найденных?

Вроде сделал и работает, хоть и немного коряво, но делает то что нужно.


rem echo off
rem Директория для перемещения
set movfld="c:\temp\processed"
rem Общий путь к корню директории
set root="c:\temp"
rem Источник файлов (отсюда файлы копируются и удаляются сразу по одному)
set FromDir="\test1\"
rem Получатель файлов
set ToDir="\test2\"

rem проверка на наличие хоть одного файла в директории получателя
for /r %movfld%\ %%A in (*.tif *.djv *.pdf) do (IF exist %%A goto :ending)

:moving
Удаление списка файлов
del /q /f dirlistfiles.txt

rem Обход по каталогам и файлам для выбора копируемых файлов
for /d %%D in (%root%%FromDir% %root%%FromDir%*) do (
@for %%x in ("%%D\*.tif" "%%D\*.djv" "%%D\*.pdf") do (
rem копирования файла с воссозданием исходной структуры путей
xcopy %%x %movfld%%%~px /E /F /H /R /K /Y
rem При успешном копировании удалить файл из источника
if errorlevel 0 if not errorlevel 1 (del %%x /q /f)
exit
)
:ending
echo Ending program. Files is present in processing folder.




© OSzone.net 2001-2012