Войти

Показать полную графическую версию : Перемещение файлов по списку


Arsenik77
25-10-2011, 10:06
Есть список файлов filelist.txt (с абсолютными путями), надо переместить файлы которые в списке в другую папку с сохранением структуры папок.
Например: из папки scr переместить файлы в dst
filelist.txt
c:\src\1.jpg ---> d:\dst\1.jpg
c:\src\sdf.jpg ---> d:\dst\sdf.jpg
c:\src\YYY\sdsdf.txt ---> d:\dst\YYY\sdsdf.txt

megaloman
25-10-2011, 13:20
@Echo Off
cls
FOR /F "usebackq delims=" %%f IN ("D:\Delete\filelist.txt") DO Call :MoveFile "%%~f"
GoTo :Eof

:MoveFile

Set Out="%~dp1"
Set Out=%Out:"c:\src\="d:\dsc\%
Set Out=%Out:\"="%

Md %Out% >nul 1>nul 2>nul

Move %1 %Out%

megaloman
26-10-2011, 11:25
Вот идея того, как избежать повторного запуска именно конкретного батника, при этом иметь возможность запускать любой другой батник с таким же контролем повторного запуска - на время работы создаём вспомогательный файл и после нормальной отработки его удаляем. При принудительном завершении батника этот файл придётся удалить вручную.@Echo Off
cls
If Exist "%0.log" (
Echo *****************************************
Echo Предыдущий запуск батника- смотри файл:
Echo %0.log
Echo нормально не завершен
Echo *****************************************
Pause
GoTo :Eof
)
Echo %Date% %Time% >"%0.log"

FOR /F "usebackq delims=" %%f IN ("D:\Delete\filelist.txt") DO Call :MoveFile "%%~f"

Del "%0.log"
GoTo :Eof

Arsenik77
27-10-2011, 10:14
megaloman, Твой вариант гораздо лучше, чем просто блокирование CMD.EXE

Arsenik77
04-12-2011, 20:43
Ситуация такая: если после создания списка файлов в пупке s:\tor-s\OK появился новый файл, то нужно повторно перезапустить батник (или его часть, например с метки :Begine)

@Echo On
cls
If Not Exist t: GoTo :Eof
If Exist "%0.log" (
Echo *****************************************
Echo Предыдущий запуск батника- смотри файл:
Echo %0.log
Echo нормально не завершен
Echo *****************************************
GoTo :Eof
)
Echo %Date% %Time% >"%0.log"
chcp 1251

md T:\ss\1
rem :Begine
rem копирование исход в приход с созданием списка скопированных файлов
c:\nnbackup\nnbackup.exe copy -i "s:\tor-s\OK" -o "t:\SS\1" -s -v -list s:\tor-s\OK.txt -fp

FOR /F "usebackq delims=" %%f IN ("s:\tor-s\OK.txt") DO Call :MoveFile "%%~f"

:MoveFile

Set Out="%~dp1"
Set Out=%Out:"s:\tor-s\OK\="s:\films\%
Set Out=%Out:\"="%

Md %Out% >nul 1>nul 2>nul

Move %1 %Out%

Del "%0.log"
rem Удаление пустых папок
:again
for /f "tokens=*" %%i in (' dir /b /s /ad "s:\tor-s\OK" ') do 2>nul rd /q "%%i" && goto:again
GoTo :Eof


Может так: rem Проверка на присутсвие файлов в папке ОК
rem set sFolder=s:\tor-s\OK
rem >nul (dir /b "%sFolder%" | find.exe /v "") && goto :Begine

megaloman предложил:
Как вариантSet Present=0
FOR %%i IN ("%sFolder%\*.*") DO Set Present=1
If %Present%==1 Echo Файлы есть

Но куда его ставить?? В конце батника, он не отрабатывается.




© OSzone.net 2001-2012