Компьютерный форум 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=218820)

Arsenik77 25-10-2011 10:06 1781135

Перемещение файлов по списку
 
Есть список файлов 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 1781250

Код:

@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 1781973

Вот идея того, как избежать повторного запуска именно конкретного батника, при этом иметь возможность запускать любой другой батник с таким же контролем повторного запуска - на время работы создаём вспомогательный файл и после нормальной отработки его удаляем. При принудительном завершении батника этот файл придётся удалить вручную.
Код:

@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 1782730

megaloman, Твой вариант гораздо лучше, чем просто блокирование CMD.EXE

Arsenik77 04-12-2011 20:43 1809210

Ситуация такая: если после создания списка файлов в пупке 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 Файлы есть

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


Время: 01:42.

Время: 01:42.
© OSzone.net 2001-