Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Перемещение файлов по списку

Ответить
Настройки темы
CMD/BAT - Перемещение файлов по списку

Пользователь


Сообщения: 72
Благодарности: 1

Профиль | Отправить PM | Цитировать


Есть список файлов 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

Отправлено: 10:06, 25-10-2011

 

Ветеран


Contributor


Сообщения: 2723
Благодарности: 1693

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@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, 25-10-2011 в 17:19.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:20, 25-10-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2723
Благодарности: 1693

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:25, 26-10-2011 | #3


Пользователь


Сообщения: 72
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:14, 27-10-2011 | #4


Пользователь


Сообщения: 72
Благодарности: 1

Профиль | Отправить PM | Цитировать


Ситуация такая: если после создания списка файлов в пупке 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 Файлы есть
Но куда его ставить?? В конце батника, он не отрабатывается.

Отправлено: 20:43, 04-12-2011 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Перемещение файлов по списку

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Подскажите программу downloader для скачивания по списку (список - 10000 файлов) Demdot Хочу все знать 2 11-06-2011 23:11
Прочие БД - Извлечение файлов по списку Aviator Программирование и базы данных 1 22-02-2011 02:44
CMD/BAT - [решено] перемещение каталогов по списку neprotiv Скриптовые языки администрирования Windows 4 02-03-2010 09:39
[решено] Замена файлов по списку Endy1 Программирование в *nix 9 15-02-2010 13:50
Перемещение по списку в Excel Evita Хочу все знать 3 16-03-2006 01:13




 
Переход