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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Поиск папок в поддиректории по списку из txt и перемещение (http://forum.oszone.net/showthread.php?t=313950)

cyberp1983 17-04-2016 07:46 2627025

Поиск папок в поддиректории по списку из txt и перемещение
 
Приветствую!
Помогите решить задачу. Есть заранее составленный список папок в текстовом файле (life.txt) вида:
79032177652
79032178139
79032199051
79032239615 и так далее.
Нужно пройтись по этому списку и найти в текущей папке, откуда выполняется скрипт, все папки из списка и переместить их в заданную папку.
Те папки которые в процессе работы не были найдены - занести в отдельный текстовый файл.
Спасибо!

Нашел на форуме этот скрипт, но он ищет файлы а не папки.

@echo off
chcp 1251>nul

set "list=list.txt"
set "folder=D:\Заданная папка"
set "not_found=not_found.txt"

2>nul md "%folder%"
>"%not_found%" (
for /f "usebackq delims=" %%i in ("%list%") do (
for /f "delims=" %%j in ('
"2>nul dir /a-d/b/s "%%i""
') do (
>nul move "%%j" "%folder%"
)
)|| (
echo %%i
)
)

exit /b

cyberp1983 17-04-2016 08:04 2627030

Решение найдено! Спасибо NiOl


@echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

set Lst=C:\Users\Cyber\Desktop\old\lifelist.txt
set Src=C:\Users\Cyber\Desktop\old
set Dst=C:\Users\Cyber\Desktop\old\LIFE

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

cyberp1983 17-04-2016 10:09 2627062

Решение не работает, копирует пустые файлы... часть папок скопировал нормально, а часть папок просто пустые

Georgio 17-04-2016 10:50 2627072

Цитата:

Цитата cyberp1983
Нужно пройтись по этому списку и найти в текущей папке, откуда выполняется скрипт, все папки из списка и переместить их в заданную папку. »



Код:

@echo off
>nul chcp 1251

set "list=Список папок.txt"
set "folder=D:\Заданная папка"
set "not_found=Не найдено.txt"

2>nul md "%folder%"
>"%not_found%" (
 for /f "usebackq delims=" %%i in ("%list%") do @(
  >nul 2>&1 move "%%i" "%folder%"|| echo %%i
 )
)

exit /b


cyberp1983 17-04-2016 11:01 2627074

копировало только структуру подпапок, без файлов(

megaloman 17-04-2016 16:51 2627158

Georgio, move "%%i" "%folder% Будет работать только если обе папки на одном диске. Иначе получим: Отказано в доступе.
Мой вариант:
Код:

@Echo off

Set "Out=E:\Out"
Set "What=SpisDir.txt"

Set "No=NotExist.txt"

Del "%No%" 2>nul

SetLocal EnableExtensions EnableDelayedExpansion

FOR /F "usebackq delims=" %%i IN ("%What%") DO (
        Dir /b /A:D "%%i" >nul 2>nul
        If !ErrorLevel!==0 (
                Md "%Out%\%%i" 2>Nul
                Move "%%i\*.*" "%Out%\%%i\" >nul 2>nul
                Rd "%%i" 2>nul
        ) Else (
                Echo Нет %%i >>"%No%"
        )
)


alpap 17-04-2016 17:30 2627171

cyberp1983,
Код:

@echo off

set "list=spisok_p.txt"
set "folder=%Userprofile%\Desktop\papka_z"
set "not_found=spisok_not.txt"

for /f "delims=" %%a in ('type "%list%"') do if exist "%%a" 2>nul md "%folder%"&>nul 2>&1 move "%%a" "%folder%"
>"%not_found%" (dir/ad/b|findstr/vg:"%list%")
exit/b

.
На другой диск не получится.

alpap 17-04-2016 18:02 2627178

Так работает и на другой диск:
Код:

@echo off

set "list=spisok_p.txt"
set "folder=D:\papka_z"
set "not_found=spisok_not.txt"

for /f "delims=" %%a in ('type "%list%"') do if exist "%%a" 2>nul md "%folder%"&>nul 2>&1 xcopy /e "%%a" "%folder%\%%a\"&2>nul rd /q /s "%%a")
>"%not_found%" (dir/ad/b|findstr/vg:"%list%")
exit/b

.


Время: 18:54.

Время: 18:54.
© OSzone.net 2001-