|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Распределение файлов о папкам, от числового значения в имени файла. |
|
|
CMD/BAT - [решено] Распределение файлов о папкам, от числового значения в имени файла.
|
Новый участник Сообщения: 39 |
Друзья, здравствуйте.
Помогите пожалуйста с решением задачки. а) Есть куча конечных папок (Обзовём их "B", "C", "D", "E", "F", "G" и "H"), обозначеных как переменные, имя которых является неким бессмысленным числовым значением. б) Есть изначальная папка, в которой складывается куча файлов, в ЧАСТИ имени каждого из файлов обязательно есть число, которое ТОЧНО совпадает с именем одной из конечных папок. Задача - распределить все файлы из изначальной папки, в соответствии с пунктами "a" и "b", то-есть: чтобы файл с именем "файл_01010101.txt" переместился в папку "01010101" чтобы файл с именем "файл_02020202.txt" переместился в папку "02020202" чтобы файл с именем "файл_03030303.txt" переместился в папку "03030303" и так далее. Туго у меня с FOR и регулярками, по этому прошу помощи. Всем огромное спасибо! |
|
Отправлено: 10:32, 12-02-2019 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать POSTREALITY, количество знаков в числе постоянное? Перед числом обязательно "_"? Число в конце имени? А если папки с подходящим именем нет?
|
------- Отправлено: 10:39, 12-02-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 39
|
Профиль | Отправить PM | Цитировать megaloman,
"Количество знаков в числе постоянное?" - ДА (во всех случаях - ровно 20 цифр) Перед числом обязательно "_"? - к сожалению, ДА. "Число в конце имени?" - ДА "А если папки с подходящим именем нет?" - в конце скрипта добавлю пересчёт файлов в папке и выведу сообщение в консоль типа "в папке осталось n файлов". Большое спасибо! |
Последний раз редактировалось POSTREALITY, 12-02-2019 в 11:37. Отправлено: 11:10, 12-02-2019 | #3 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @Echo Off Cls Set "FileIn=Z:\Box_In\*_*.txt" Set "Delim=_" Set "BoxOut=Z:\Box_Out" For %%i In ("%FileIn%") Do Call :Name "%BoxOut%" "%Delim%" "%%i" Set /A N=0 For %%i In ("%FileIn%") Do Set /A N+=1 Echo !!! Осталось неперемещенными %N% файлов "%FileIn%" pause GoTo :Eof :Name Set "S=%~n3" :Begin Set "SS=%S% Call Set "S=%%SS:*%~2=%%" If Not "%SS%"=="%S%" GoTo :Begin rem If Not Exist "%~1\%S%" Md "%~1\%S%" If Not Exist "%~1\%S%" Exit /B 1 >nul Move /Y %3 "%~1\%S%\" Exit /B 0 |
------- Отправлено: 12:02, 12-02-2019 | #4 |
Новый участник Сообщения: 39
|
Профиль | Отправить PM | Цитировать megaloman,
Большое спасибо! Что до :Name примерно понял, что после вообще не понимаю ![]() Подскажите пожалуйста, тут есть одно НО: У меня "%BoxOut%" является не единой директорией. Их под 50 разных. Я их обозначил переменными типа: SET "00000000000000000000=X:\папка\конечная папка" SET "11111111111111111111=X:\папка2\подпапка\конечная папка" SET "22222222222222222222=X:\папка\подпапка2\конечная папка" SET "33333333333333333333=X:\ещё какой нибудь путь к конечной папке" Единственное что объединяет конечные папки - они все лежат на одном диске. Как быть в таком случае? |
|
Отправлено: 12:31, 12-02-2019 | #5 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата POSTREALITY:
Цитата POSTREALITY:
И да, лепить в код 50 переменных для путей поддиректорий неблагодарная и неправильная затея. |
||
Отправлено: 12:40, 12-02-2019 | #6 |
Новый участник Сообщения: 39
|
Профиль | Отправить PM | Цитировать alpap,
Цитата alpap:
Цитата alpap:
|
||
Отправлено: 12:44, 12-02-2019 | #7 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать @Echo Off Cls Set "FileIn=Z:\Box_In\*_*.txt" Set "Delim=_" Set "@@Out1=Z:\Box_Out\01010101" Set "@@Out2=Z:\Box_Out\02020202" Set "@@Out3=Z:\Box_Out\03030303" For %%i In ("%FileIn%") Do Call :Name "@@Out" "%Delim%" "%%i" Set /A N=0 For %%i In ("%FileIn%") Do Set /A N+=1 Echo !!! Осталось неперемещенными %N% файлов "%FileIn%" pause GoTo :Eof :Name Set "S=%~n3" :Begin Set "SS=%S% Call Set "S=%%SS:*%~2=%%" If Not "%SS%"=="%S%" GoTo :Begin FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul Set "%~1"`) DO ( If "%%~nj"=="%S%" >nul Move /Y %3 "%%j\" &&Exit /B 0 ) Exit /B 1 |
------- Отправлено: 13:17, 12-02-2019 | #8 |
Новый участник Сообщения: 39
|
Профиль | Отправить PM | Цитировать |
Отправлено: 16:27, 12-02-2019 | #9 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата POSTREALITY:
Здесь на портале есть в начале темы пункт с ссылками. Но, прежде всего, наибольшую пользу я получаю от разбора решений задач и своих попыток что-то решать своими силами. Что непонятно - спрашиайте. |
|
------- Отправлено: 16:54, 12-02-2019 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Раскидать файлы по папкам согласно дате в имени файла | spkvvs | Скриптовые языки администрирования Windows | 17 | 24-01-2024 16:03 | |
Любой язык - [решено] Скрипт который раскидывает файлы по папкам, с частью имени этих файлов | username-qq | Скриптовые языки администрирования Windows | 6 | 06-10-2018 18:30 | |
CMD/BAT - распределение файлов по папкам по списку | bellagio | Скриптовые языки администрирования Windows | 1 | 11-05-2014 13:14 | |
CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную | VokaMut | Скриптовые языки администрирования Windows | 12 | 26-11-2012 15:54 | |
CMD/BAT - [решено] Перемещение файлов из одной папки в разные в зависимости от имени файла | Sarge81 | Скриптовые языки администрирования Windows | 4 | 20-09-2011 04:20 |
|