1 (изменено: ypppu, 2016-04-17 14:52:17)

Тема: CMD/BAT: Поиск и копирование папок по списку из txt файла

На жестком хранятся порядка 10000 папок из которых по списку (txt файл ) нужно найти и скопировать в другу папку, около 200 папок. В инете нашёл скрипт, но он ищет файлы а не папки...

@echo off
chcp 1251>nul

set "list=life.txt"   - файл в котором перечень папок
set "folder=C:\Users\Books\Desktop\OZHILI"  - папка в которую их нужно скопировать
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

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

2 (изменено: Ded.Shkarpet, 2016-04-19 11:55:36)

Re: CMD/BAT: Поиск и копирование папок по списку из txt файла

Всё дело в строчке

int-el пишет:

dir /a-d/b/s "%%i""

У команды dir ключ /a-d означает "всё, кроме директорий". Если в файле-списке только директории, следует заменить его на /AD. А лучше убрать бы всю эту строчку, поскольку команда move, применённая к директории переносит всю директорию с поддиректориями и вложенными файлами. Оставить

for /f "usebackq delims=" %%i in ("%list%") do (
 if not exist %%i (
   @echo %%i >>%not_found%
 ) else (
  move "%%i" "%folder%"
 )
)

А на будущее рекомендовал бы посмотреть для бОльшей автоматизации процесса в сторону команды robocopy /?. В неё уже заложена возможность запуска копирования в определённое время, повторных попыток копирования через определённый таймаут в случае неудач, и ведение лога.

3

Re: CMD/BAT: Поиск и копирование папок по списку из txt файла

Добрый день!
Столкнулся с аналогичной проблемой, но несколько с измененными исходными данными:
Есть эксель файл реестра в котором в двух ячейках прописаны
1) названия папок которые нужно перенести
2) в какую папку перенести.
При копировании в txt файл получается примерно следующее:

ED.D.P001.0.0UXB&&&&&&&&.068.SD.0005.E Pioneer base. Construction laboratory.
ED.D.P001.0.0UXS&&&&&&&&.010.DC.0002.E Drilling and blasting works area. Parking area for commercial vehicles and special machinery.

Если бы названий папок куда копировать было не очень много, можно было бы и в ручную это сделать, но их слишком много (более 400).
Подскажите как модифицировать полученный код выше, чтоб было перемещение папок было с созданием директории назначения при необходимости?

4

Re: CMD/BAT: Поиск и копирование папок по списку из txt файла

Ойган, упакуйте образец:

Ойган пишет:

Есть эксель файл

в архив и выложите на вменяемый обменник или облако.

5

Re: CMD/BAT: Поиск и копирование папок по списку из txt файла

alexii

Добрый день!
Прикладываю подопытного

Post's attachments

test.zip 15.54 kb, 6 downloads since 2020-05-14 

You don't have the permssions to download the attachments of this post.

6

Re: CMD/BAT: Поиск и копирование папок по списку из txt файла

Ойган, там только имена без путей.

Где брать имя исходного каталога, где будут расположены каталоги из столбца «A»? Где брать имя целевого каталога, где могут находиться каталоги из столбца «B»?

7

Re: CMD/BAT: Поиск и копирование папок по списку из txt файла


@echo off

setlocal

set "FILE=z.tsv"

set "SRCROOT=%CD%"

set "DSTROOT=%CD%"

:: delims is TAB (ASCII 9)
for /f "usebackq tokens=1,2 delims=	" %%a in ( "%FILE%" ) do (
	mkdir "%DSTROOT%\%%~b"
	copy /b "%SRCROOT%\%%~a\*" "%DSTROOT%\%%~b"
)
( 2 * b ) || ! ( 2 * b )

8 (изменено: Ойган, 2020-05-20 16:28:32)

Re: CMD/BAT: Поиск и копирование папок по списку из txt файла

alexii

Пути папки назначения и папки источника - текущая папка с расположением батника.
Пример выше от пользователя Rumata не заработал. По cmd отследил, что в цикле в результате опроса файла (хоть в формате txt, хоть в формате csv) в переменную b не считывается ничего, а в переменную a - вся текущая строка из FILE (название папки которую копировать и через пробел куда копировать).
Может я экспортирую как-то не так? Пробовал и простым копированием и сохранить как ТХТ с разделителем и какой-то внешний (интернет) конвертор в csv...

9

Re: CMD/BAT: Поиск и копирование папок по списку из txt файла

Ойган пишет:

в переменную b не считывается ничего, а в переменную a - вся текущая строка

потому что


:: delims is TAB (ASCII 9)
for /f "usebackq tokens=1,2 delims=	" %%a in ( "%FILE%" ) do (

здесь сказано, что разделитель символ табуляции. В строке delims= " между символами "равно" и "кавычка" должен быть символ табуляции.

Возможно это и не очевидно, но расширение .tsv поразумевает формат TAB separated values, то есть каждый столбец отделен от соседних символом табуляции.

( 2 * b ) || ! ( 2 * b )

10

Re: CMD/BAT: Поиск и копирование папок по списку из txt файла

Rumata

Благодарю покорно на выходных поэкспериментирую дома еще

11 (изменено: Ойган, 2020-05-21 13:32:44)

Re: CMD/BAT: Поиск и копирование папок по списку из txt файла

Переделал вот в такой вариант:

@echo off

setlocal

set "FILE=123.txt"

set "SRCROOT=%CD%"

set "DSTROOT=%CD%"

:: delims is TAB (ASCII 9)
for /f "usebackq tokens=1,2 delims= " %%a in ("%FILE%") do (
mkdir "%DSTROOT%\%%~b"
move "%SRCROOT%\%%~a" "%DSTROOT%\%%~b\%%~a"
)


Были какие-то проблемы с копированием (не находил путей/файлов и пр.).
Доволен как слон, еще раз спасибо Rumata