Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Автоматизация (поэтапное перемещения файлов) между двумя директориями (http://forum.oszone.net/showthread.php?t=194721)

alexey_vf 22-12-2010 14:34 1572102

Автоматизация (поэтапное перемещения файлов) между двумя директориями
 
Уважаемые коллеги просьба дать наводку или подсказать как решить задачу с помощью простого 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 1572257

Попробуй
Код:

for /f "delims=" %%x in ('dir /a-d/b/s "%FromDir%*.tif"') do (
*не проверял

alexey_vf 22-12-2010 20:21 1572316

Цитата:

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.



Время: 17:29.

Время: 17:29.
© OSzone.net 2001-