Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
 Аватар для Continent
1 / 1 / 1
Регистрация: 23.12.2015
Сообщений: 16

Создание папок и перемещение в них файлов по списку

23.12.2015, 14:43. Показов 5512. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Собственно, вопрос в следующем:
Имеется список файлов текущего каталога вида
Code
1
2
3
4
5
6
7
8
9
1.jpg,2.jpg
 
3.jpg
 
 
4.jpg,5.jpg,6,jpg
7.jpg,8.jpg
 
9.jpg,10.jpg
Нужен батник, который по этому списку будет копировать файлы каждой строки в отдельный каталог предварительно его создавая.
Буду благодарен за любую помощь.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.12.2015, 14:43
Ответы с готовыми решениями:

Создание папок по имени файлов и перемещение этих файлов в созданные папки
Господа, прошу помощи. В батниках полный ноль Имеется папка с множеством файлов, скриншот во вложении Эти файлы относятся к...

Создание папок с именами заданных файлов и перемещение этих файлов в созданные папки
Подскажите пожалуйста как по названиям файлов txt создать папки и положить в каждую из папок файл с таким же названием.

Создание подпапок и перемещение в них файлов
Здравствуйте! В очередной раз нужна помощь. Имеем папку, назовем ее папка "А", в которой находятся подпапки А1, А2,...Аn. В...

15
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
24.12.2015, 00:59
Continent, Что за список, как он так получился, сделайте список файлов Вашего каталога с помощью такого батника и сюда его:
Windows Batch file
1
2
3
@echo off
dir /a-d /b "C:\papka\*">>"list.txt"
pause>nul
.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
24.12.2015, 15:31
Continent, Теперь хоть понятно:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
rem Папка с файлами
set "in=C:\papka"
rem Список файлов
set "list=C:\1.txt"
for /f "usebackq delims=" %%i in ("%list%") do (
 for /f "delims=" %%j in ('dir /a-d /b /s "%in%"') do (
  if %%~i==%%~nxj if not exist "%%~nj\" md "%%~nj\" & copy "%%~j" "%%~nj\"
))
pause>nul
.
0
 Аватар для Continent
1 / 1 / 1
Регистрация: 23.12.2015
Сообщений: 16
29.12.2015, 10:29  [ТС]
alpap, спасибо, почти то, что нужно, но..
В том виде, что Ты дал, он копирует только файлы, которые указаны в строке по одному, те строки, где указаны файлы через запятую, он пропускает.
Добавил запятые в "..delims=,", теперь обрабатывает все строки, но копирует только первый файл в строке, остальные игнорит.
0
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
29.12.2015, 11:03
Цитата Сообщение от Continent Посмотреть сообщение
теперь обрабатывает все строки, но копирует только первый файл в строке, остальные игнорит.
Добавьте разбор строк. То, что имена файлов в текстовом файле перечислены через запятую, это хорошо. Не проверял, пробуйте:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
setlocal enabledelayedexpansion
 
rem Папка с файлами
set "in=C:\papka"
rem Список файлов
set "list=C:\1.txt"
 
for /f "usebackq delims=" %%a in ("%list%") do (
for %%b in ("%%a") do (
for /f "delims=" %%c in ('dir /a-d /b /s "%in%"') do (
  if "%%b"=="%%~nc" if not exist "%%~nc" md "%%~nc" & copy "%%c" "%%~nc"
)))
0
 Аватар для Continent
1 / 1 / 1
Регистрация: 23.12.2015
Сообщений: 16
29.12.2015, 12:02  [ТС]
sov44, что-то вообще ничего не происходит..(
В delims также ставил запятые
0
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
29.12.2015, 14:23
Цитата Сообщение от Continent Посмотреть сообщение
что-то вообще ничего не происходит..
По наитию не получилось
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
setlocal enabledelayedexpansion
 
rem Папка с файлами
set "in=C:\papka"
rem Список файлов
set "list=C:\1.txt"
 
for /f "usebackq delims=" %%a in ("%list%") do (
for %%b in (%%a) do (
for /f "delims=" %%c in ('dir /a-d /b /s "%in%\*" 2^>nul') do (
  if "%%~b"=="%%~nc" (if not exist "%%~nc" md "%%~nc"& copy "%%c" "%%~nc")
)))
pause
exit
0
 Аватар для Continent
1 / 1 / 1
Регистрация: 23.12.2015
Сообщений: 16
29.12.2015, 17:08  [ТС]
Нее), sov44, все, что поменялось, это только то, что любую кнопку предлагает нажать для выхода)
0
 Аватар для Continent
1 / 1 / 1
Регистрация: 23.12.2015
Сообщений: 16
06.01.2016, 14:16  [ТС]
Все еще пытаюсь решить проблему, но пока безрезультатно, на данный момент код который дал alpap, сохраняет в созданные директории только первый файл из каждой строки списка. Если кто-то порекомендует еще какое-нибудь решению буду очень благодарен.
0
 Аватар для b0gus
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 841
06.01.2016, 22:52
Continent, попробуйте так
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
            :: in_dir каталог, в котором лежит море файлов
set "in_dir=диск1:\путь1"
 
            :: list список файлов в каталоге %dir% вида:
            ::  1.jpg,2.jpg
            ::  3.jpg
            ::  4.jpg,5.jpg,6.jpg
            ::  7.jpg,8.jpg
            ::  9.jpg,10.jpg
set "list=диск1:\путь2\list.txt"
 
            :: счётчик строк в файле %list%
set /a "cnt_line=0"
 
            :: по этому списку файлы КАЖДОЙ строки
            :: надо копировать в ОТДЕЛЬНЫЙ каталог,
            :: предварительно его создавая
            :: out_dir - корневой каталог, в котором будут создаваться
            :: каталоги для КАЖДОЙ строки, принимаем, что они будут
            :: именоваться dir_4line1, dir_4line2, ...
set "out_dir=диск2:\путь3"
 
if "%in_dir:~-1%"  == "\" set "in_dir=%in_dir:~0,-1%"
if "%out_dir:~-1%" == "\" set "out_dir=%out_dir:~0,-1%"
 
for /f "usebackq delims=" %%v in ("%list%") do call :parse %%v
exit
 
:parse
  set "x=%*"&set /a "cnt_line+=1"
:parse_line
  for /f "tokens=1* delims=," %%a in ("!x!") do (
    set "x=%%b"
    if exist "%in_dir%\%%a" 2>nul md "%out_dir%\dir_4line%cnt_line%"&>nul copy /y "%in_dir%\%%a" "%out_dir%\dir_4line%cnt_line%"
    if defined x goto %0_line
  )
exit /b
0
 Аватар для Continent
1 / 1 / 1
Регистрация: 23.12.2015
Сообщений: 16
07.01.2016, 16:11  [ТС]
b0gus, Спасибо, но опять-таки, в каждый созданный каталог попадает только первый файл из каждой строки, т.е., например
из строк:
Code
1
2
4.jpg,5.jpg,6.jpg
7.jpg,8.jpg,9.jpg,10.jpg
, в созданные каталоги попадут только файлы 4.jpg и 7.jpg
0
 Аватар для b0gus
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 841
07.01.2016, 18:47
Continent, запостите сюда, пожалуйста, ваш код, по которому
Цитата Сообщение от Continent Посмотреть сообщение
в каждый созданный каталог попадает только первый файл из каждой строки
0
 Аватар для Continent
1 / 1 / 1
Регистрация: 23.12.2015
Сообщений: 16
07.01.2016, 19:08  [ТС]
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
            :: in_dir ???????, ? ??????? ????? ???? ??????
set "in_dir=C:\Users\Admin\Desktop\foto_test"
 
            :: list ?????? ?????? ? ???????? %dir% ????:
            ::  1.jpg,2.jpg
            ::  3.jpg
            ::  4.jpg,5.jpg,6.jpg
            ::  7.jpg,8.jpg
            ::  9.jpg,10.jpg
set "list=C:\Users\Admin\Desktop\foto_test\123.txt"
 
            :: ??????? ????? ? ????? %list%
set /a "cnt_line=0"
 
            :: ?? ????? ?????? ????? ?????? ??????
            :: ???? ?????????? ? ????????? ???????,
            :: ?????????????? ??? ????????
            :: out_dir - ???????? ???????, ? ??????? ????? ???????????
            :: ???????? ??? ?????? ??????, ?????????, ??? ??? ?????
            :: ??????????? dir_4line1, dir_4line2, ...
set "out_dir=C:\Users\Admin\Desktop\foto_test"
 
if "%in_dir:~-1%"  == "\" set "in_dir=%in_dir:~0,-1%"
if "%out_dir:~-1%" == "\" set "out_dir=%out_dir:~0,-1%"
 
for /f "usebackq delims=," %%v in ("%list%") do call :parse %%v
exit
 
:parse
  set "x=%*"&set /a "cnt_line+=1"
:parse_line
  for /f "tokens=1* delims=," %%a in ("!x!") do (
    set "x=%%b"
    if exist "%in_dir%\%%a" 2>nul md "%out_dir%\dir_4line%cnt_line%"&>nul copy /y "%in_dir%\%%a" "%out_dir%\dir_4line%cnt_line%"
    if defined x goto %0_line
  )
exit /b
Добавил в строке
Windows Batch file
28
for /f "usebackq delims=" %%v in ("%list%") do call :parse %%v
в делимс запятую, без которой создавались каталоги только для тех файлов, которые указаны в строке по одному
0
 Аватар для b0gus
741 / 339 / 134
Регистрация: 17.03.2014
Сообщений: 841
07.01.2016, 21:05
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Continent, в 28-й строке запятая в delims НЕ нужна, именно она и даёт эффект "только первый файл из списка", недогляд в коде был ниже, при разборе собственно строки списка:
ежели в строке между запятыми пробел или табуляция, поправил
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
set "in_dir=C:\Users\Admin\Desktop\foto_test"
set "list=C:\Users\Admin\Desktop\foto_test\123.txt"
set /a "cnt_line=0"
set "out_dir=C:\Users\Admin\Desktop\foto_test"
 
if "%in_dir:~-1%"  == "\" set "in_dir=%in_dir:~0,-1%"
if "%out_dir:~-1%" == "\" set "out_dir=%out_dir:~0,-1%"
 
for /f "usebackq delims=" %%v in ("%list%") do call :parse %%v
exit
 
:parse
  set "x=%*"&set /a "cnt_line+=1"
:parse_line
  for /f "tokens=1* delims=," %%a in ("!x!") do (
    :: избавимся от СЛУЧАЙНЫХ/намеренных пробелов и <tab> ПЕРЕД запятой в списке файлов
    for /f "tokens=*" %%v in ("%%a") do set "a=%%v"
    set "x=%%b"
    if exist "%in_dir%\!a!" 2>nul md "%out_dir%\dir_4line%cnt_line%"&>nul copy /y "%in_dir%\!a!" "%out_dir%\dir_4line%cnt_line%"
    if defined x goto %0_line
  )
exit /b
1
 Аватар для Continent
1 / 1 / 1
Регистрация: 23.12.2015
Сообщений: 16
11.01.2016, 11:43  [ТС]
b0gus, Мои преогромнейшие благодарности!) Именно то, что нужно!!! Большое спасибо!))
0
15.01.2016, 15:06

Не по теме:

Continent, Случайно забрел.
Даже если список в таком виде:

Code
1
2
3
4
2.txt
3.txt, 4.txt,5.txt
 
6.txt,7.txt
то такой код сделает то что надо:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo on
rem Папка с файлами
set "in=papka"
rem Список файлов
set "list=5.txt"
rem Каталог назначения
set "out=d"
for /f "usebackq delims=" %%i in ("%list%") do (
 for %%j in (%%~i) do (
  for /f "delims=" %%a in ('dir /a-d /b /s "%in%"') do (
   if %%~j==%%~nxa if not exist "%out%\%%~na" md "%out%\%%~na" & copy "%%~a" "%out%\%%~na"
)))
pause>nul
.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.01.2016, 15:06
Помогаю со студенческими работами здесь

Переименование папок/файлов по списку
Добрый день уважаемые гуру VBA! Нашел старый макрос, которым когда-то пользовался на работе и переименовывал папки по списку, теперь...

Удаление файлов и папок по списку с относительными путями
Здравствуйте! Прошу помощи. Нужно кинуть батник возле каталога /Data/ он делает проверку, есть ли эти файлы и папки в этом каталоге из...

Консольное приложение: отображение структуры файлов и папок, перемещение по папкам, открытие файлов
Приложение написанное на языке СИ позволяющее в консольном режиме отображать структуру файлов и папок,перемещаться по папкам и открывать на...

Перемещение файлов и папок
Доброй ночи Подскажите пожалуйста как перемещать файлы и папки программно на СИ++ под LINUX Функция rename может перемещать файлы, а...

Перемещение файлов из папок в одну
Добрый день, помогите создать bat, который бы выполнял следущую операцию: В одной папке находится множество папок, батник...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru