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

promt@vk 25-08-2021 21:36 2964980

Поиск и копирование папок из списка txt
 
Всем привет, выручайте!
У меня есть список папок в txt, которые нужно скопировать вместе с файлами внутри них, в другую папку.

Iska 25-08-2021 22:32 2964983

Цитата:

Цитата promt@vk
У меня есть список папок в txt »

Упакуйте Ваш файл в архив и приложите к сообщению.

promt@vk 25-08-2021 22:47 2964984

Там около 60 гб.

megaloman 25-08-2021 23:31 2964986

Цитата:

Цитата promt@vk
У меня есть список папок в txt »

Цитата:

Цитата Iska
Упакуйте Ваш файл в архив и приложите к сообщению. »

Хотя бы несколько строк от этого текстового файла. Если папки расположены в
одной папке и список приблизительно такой
Цитата:

Цитата Z:\Soft_In\список папок в txt.txt
Chapter05
другая папка
однa папка
Chapter01

то как-то так:
Код:

@Echo Off
cls
chcp 1251
        Set "FileTxt=Z:\Soft_In\список папок в txt.txt"
        Set "BoxIn=Z:\Box_In"
        Set "BoxOut=Z:\Box_Out"

        If Not Exist "%BoxOut%\" Md "%BoxOut%"
        FOR /F "usebackq delims=" %%f IN ("%FileTxt%") DO (
                If Exist "%BoxIn%\%%f\*.*" Xcopy "%BoxIn%\%%f\*.*" "%BoxOut%\%%f\" /E /Y /D /H /R /F
        )
pause
Exit /B 0


promt@vk 25-08-2021 23:34 2964987

Код:

60028079
60017932
60020335
60015993
60028096
60026408
60026289
60026288
60027468
60026417
60021445

Это название папок

promt@vk 26-08-2021 00:25 2964989

А возможно сделать, чтобы он копировал частичное имя папки, например: Имя папки: Папка113355, а из файла было 113355

Iska 26-08-2021 01:26 2964990

Шестьдесят гигабайт имён каталогов в одном каталоге. Интересно живут люди :).

Цитата:

Цитата promt@vk
А возможно сделать, чтобы он копировал частичное имя папки, например: Имя папки: Папка113355, а из файла было 113355 »

Переведите на русский, пожалуйста.

promt@vk 26-08-2021 11:31 2965003

Допустим есть список с номерами
Код:

60028079
60017932
60020335
60015993
60028096
60026408
60026289
60026288
60027468
60026417
60021445

Мне нужно найти их и копировать, но папки могут быть названа по разному
Код:

Папка 60017932
или
Код:

Новая60017932

megaloman 26-08-2021 15:02 2965026

Код:

@Echo Off
cls
>nul chcp 1251
        Set "FileTxt=Z:\Soft_In\список папок c номерами в txt.txt"

        Set "BoxIn=Z:\Box_In"
        Set "BoxOut=Z:\Box_Out"

        FOR /F "usebackq delims=" %%n IN ("%FileTxt%") DO For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\*%%n.*" /B /A:D`) Do (
                >nul Xcopy "%BoxIn%\%%f\*.*" "%BoxOut%\%%f\" /E /Y /D /H /R
        )
pause
Exit /B 0


promt@vk 26-08-2021 16:11 2965040

Попробовал, ничего не происходит

megaloman 26-08-2021 16:23 2965043

promt@vk, Что значит ничего не происходит? Черный экран и скрипт не выходит на завершение (паузу)? Попробуйте убрать >nul, я специально подавил вывод на экран команды xcopy, чтобы скрипт быстрее выполнялся. Переименуйте свой скрипт в txt-файл и приложите к сообщению.

promt@vk 26-08-2021 18:15 2965061

Код:

@Echo Off
cls
>nul chcp 1251
        Set "FileTxt=E:\test\spisok.txt"

        Set "BoxIn=D:\test\1"
        Set "BoxOut=D:\test\2"

        FOR /F "usebackq delims=" %%n IN ("%FileTxt%") DO For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\*%%n.*" /B /A:D`) Do (
                > Xcopy "%BoxIn%\%%f\*.*" "%BoxOut%\%%f\" /E /Y /D /H /R
        )
pause
Exit /B 0

HTML код:

Для продолжения нажмите любую кнопку...
и больше ничего не происходит

megaloman 26-08-2021 18:41 2965063

promt@vk, надо
Код:

Xcopy "%BoxIn%\%%f\*.*" "%BoxOut%\%%f\" /E /Y /D /H /R
без >
Я сделал все пути как у Вас, у меня работает. Возможно у вас список папок не соответствует тому, что реально есть.
Мои данные
Цитата:

Цитата E:\test\spisok.txt
60028079
60017932
60020335
60015993
60028096

Цитата:

Цитата Содержимое (список папок) в D:\test\1
Chapter01
Chapter05
другая папка
однa папка
ПапкаChapter01
ПапкаChapter05
Папкадругая папка
Папкаоднa папка
60015993
60017932
60020335
60028079
60028096
Тра Ля Ля 60015993
Тра Ля Ля 60017932
Тра Ля Ля 60020335
Тра Ля Ля 60028079
Тра Ля Ля 60028096
Тру Лю Лю 60015993
Тру Лю Лю 60017932
Тру Лю Лю 60020335
Тру Лю Лю 60028079
Тру Лю Лю 60028096

Цитата:

Цитата Содержимое (список папок) в D:\test\2\ после отработки скрипта
60015993
60017932
60020335
60028079
60028096
Тра Ля Ля 60015993
Тра Ля Ля 60017932
Тра Ля Ля 60020335
Тра Ля Ля 60028079
Тра Ля Ля 60028096
Тру Лю Лю 60015993
Тру Лю Лю 60017932
Тру Лю Лю 60020335
Тру Лю Лю 60028079
Тру Лю Лю 60028096


promt@vk 26-08-2021 18:47 2965064

Тоже самое, пишет нажмите любую кнопку

Код:

@Echo Off
cls
>nul chcp 1251
        Set "FileTxt=E:\test\spisok.txt"

        Set "BoxIn=D:\test\1"
        Set "BoxOut=D:\test\2"

        FOR /F "usebackq delims=" %%n IN ("%FileTxt%") DO For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\*%%n.*" /B /A:D`) Do (
                Xcopy "%BoxIn%\%%f\*.*" "%BoxOut%\%%f\" /E /Y /D /H /R
        )
pause
Exit /B 0


megaloman 26-08-2021 19:16 2965067

Отладочный вариант
Код:

@Echo Off
cls
>nul chcp 1251
        Set "FileTxt=E:\test\spisok.txt"

        Set "BoxIn=D:\test\1"
        Set "BoxOut=D:\test\2"

        Dir "%FileTxt%"
        Pause

        Dir "%BoxIn%" /A:D
        Pause


        FOR /F "usebackq delims=" %%n IN ("%FileTxt%") DO For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\*%%n.*" /B /A:D`) Do (
                Xcopy "%BoxIn%\%%f\*.*" "%BoxOut%\%%f\" /E /Y /D /H /R
        )
pause
Exit /B 0

Файл E:\test\spisok.txt находит? Содержимое D:\test\1 соответствует списку?

promt@vk 26-08-2021 19:42 2965068

Код:

Том в устройстве E не имеет метки.
 Серийный номер тома: 9C04-A286

 Содержимое папки E:\test

25.08.2021  21:13                14 spisok.txt
              1 файлов            14 байт
              0 папок  1*774*346*240 байт свободно
Для продолжения нажмите любую клавишу . . .


promt@vk 26-08-2021 20:35 2965074

В скрипте он указан

Код:

201655
111111

HTML код:

E:\test\1\218450
E:\test\1\32920
E:\test\1\103217
E:\test\1\папка 201655

E:\test\2\  - пуста


megaloman 26-08-2021 20:53 2965078

promt@vk, Смотрите сами:
Set "BoxIn=D:\test\1"
А у Вас
E:\test\1

alpap 26-08-2021 21:14 2965080

Цитата:

Цитата megaloman
Содержимое D:\test\1 соответствует списку? »

да он не смотрит что пишут, что показывает-то?
Цитата:

Цитата promt@vk
E:\test\1\218450
E:\test\1\32920
E:\test\1\103217
E:\test\1\папка 201655
E:\test\2\ - пуста »

т.е. вся работа только с диском Е, а в диск D вероятно никто и не смотрел.

promt@vk 26-08-2021 22:18 2965091

Вот я валенок, не тот том выставил.

В папке E:\test\ есть много других папок и подпапок, он их не будет проверять?

megaloman 26-08-2021 22:44 2965096

Цитата:

Цитата promt@vk
В папке E:\test\ есть много других папок и подпапок, он их не будет проверять? »

Скрипт последовательно читает окончание имени папки и затем ищет в папке, например, E:\test\1 подпапки, имя которых оканчивается на прочитанное окончание. Ничего иного искать он не будет. Я Вам демонстрировал свои данные, там в исходной папке есть папки, которые не соответствуют списку, они не копируются.

promt@vk 27-08-2021 11:52 2965121

Спасибо большое за помощь!


Время: 16:00.

Время: 16:00.
© OSzone.net 2001-