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

neprotiv 26-02-2010 11:25 1356370

перемещение каталогов по списку
 
здравствуйте. очень хотелось бы батник который делал следущее

перемещал каталоги (со всеми файлами, что внутри), которые записаны в тхт документе, в другую папку
к примеру информация находится в D:\spisok.txt, а каталоги в D:\data1\ чтоб переместило в D:\data2\

помогите пожалуйста...я в этом деле полный профан

NiOl 26-02-2010 13:44 1356472

Код:

@echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

set Lst=D:\spisok.txt
set Src=D:\data1\
set Dst=D:\data2\

for /f "UseBackQ Delims=" %%S in ("%Lst%") do (
call :prc %%S
for /f "Delims=" %%D in ('dir /b /s /on /ad %%S') do call :prc %%D
)
exit

:prc
set D=%1
set D=!D:%Src%=!
md %Dst%!D! 2>nul
move "%1\*.*" "%Dst%!D!\" 2>nul
if not %ErrorLevel%==0 echo "%1\*.*" =^> "%Dst%!D!\">>%~pdn0.err
exit /b

PS: ошибки отрабатываются только примерно, будет спотыкаться даже на пустых каталогах, см *.ERR

neprotiv 26-02-2010 20:57 1356789

NiOl, большое вам спасибо, что не обошли стороной
но вот в чем проблема, не переносятся каталоги с файлами, а просто создаются пустые каталоги со списка (которые есть в каталоге дата1)

neprotiv 27-02-2010 01:30 1357019

спасибо еще раз.разобрался и немного переделал...так как создавало пустые фолдеры в дата 2 ии оставляло пустые фолдеры в дата1
а также убрал отчет об ошибках...
еще раз спасибо. без вас не зделал бы

@echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

set Lst=D:\spisok.txt
set Src=D:\data1\
set Dst=D:\data2\

for /f "UseBackQ Delims=" %%S in ("%Lst%") do (
call :prc %%S
for /f "Delims=" %%D in ('dir /b /s /on /ad %%S') do call :prc %%D
)
exit

:prc
set D=%1
set D=!D:%Src%=!
md %Dst%!D! 2>nul
move "%1\*.*" "%Dst%!D!\" 2>nul
for /d %%i in ("%Src%*") do rd /q "%%i" 2>nul
for /d %%i in ("%Dst%*") do rd /q "%%i" 2>nul
exit /b

neprotiv 02-03-2010 09:39 1359314

а можно ли както использовать несколько списков одновременно с разными путями назначаения, но с одинаковым источником в одном батнике? и как написать?

например

set Lst1=D:\spisok1.txt
set Lst2=D:\spisok2.txt

set Src=D:\unsorted\

set Dst1=D:\data1\
set Dst2=D:\data2\

тоисть по списку1 шло в дата1
по списку2 шло в дата2

спасибо


Время: 13:58.

Время: 13:58.
© OSzone.net 2001-