|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Разложить файлы из кучи по каталогам согласно образцу |
|
|
CMD/BAT - Разложить файлы из кучи по каталогам согласно образцу
|
Новый участник Сообщения: 10 |
Профиль | Отправить PM | Цитировать Помогите, пожалуйста, решить следующую задачу: нужно из общей свалки файлов разложить их по каталогам, согласно образцу.
Поясню на примере: 1. Есть каталог-образец. Он содержит следующие файлы D:/страны_образец/Европа/Германия.txt2. Есть исходный каталог, с которым надо работать. Он содержит следующие файлы: D:/страны_разрбрать/Германия.txt3. Нужно получить 3-ий каталог со следующей структурой (берем файл и переносим его в каталожную структуру согласно образцу): D:/страны_разобраны/Европа/Германия.txtВажное замечание: В каталоге Страны_Разобрать не могуть быть файлы, отсутствующие в каталоге страны_образец. |
|
Отправлено: 00:26, 11-03-2011 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать @echo off set "FPattern=D:\страны_образец" set "FIn=D:\страны_разрбрать" set "FOut=D:\страны_разобраны" for /f "delims=" %%a in ('dir /s/b/a-d "%FIn%\*.txt"') do ( for /f "tokens=3 delims=\" %%b in ('dir /a-d/b/s "%FPattern%\%%~nxa"') do ( if not exist "%FOut%\%%b" md "%FOut%\%%b" move "%%a" "%FOut%\%%b" ) ) |
Отправлено: 06:26, 11-03-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Цитата:
Попробовал этот скрипт. Создал описанную мной структуру, создал батник, в который вставил приложенный код. Запускаю. Окно cmd открывается и сразу закрывается. Каталог страны_разобраны пуст. Я что-то делаю неправильно? Как мониторить работу скрипта? Можно ли вставить отладочные сообщения, которые требуют нажатия, например, пробела? |
|
Отправлено: 11:15, 11-03-2011 | #3 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Цитата Maartimus:
Я, со своей стороны, прежде чем писать скрипт, всегда его проверяю - у меня отработал без проблем. Цитата Maartimus:
Поставить pause после строчек, которые вызывают подозрения на некорректность работы. PS. Кстати, сейчас заметил, у Вас слэш в другую сторону смотрит. Вы так и пишете? |
||
Отправлено: 11:57, 11-03-2011 | #4 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Слэши смотрят в правильную сторону, я скопипастил Ваш код, поменяв только логический диск в адресе.
Поставил паузу в конце выполнения скрипта и снял скриншот окна cmd. Судя по нему, происходит некорректная работа с русскими символами. Как это решить? |
|
Отправлено: 14:17, 11-03-2011 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Maartimus, пакетные файлы надо сохранять в кодировке 866 любым поддерживающим это редактором.
|
Отправлено: 14:36, 11-03-2011 | #6 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Скрипт отрабатывает, файлы, судя по всему находит, но не перемещает. Как выловить проблему? Прикладываю скриншот скрипта, total commander и результат работы cmd |
|
Отправлено: 14:57, 11-03-2011 | #7 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Maartimus, а почему у вас tokens=10 стоит? Когда, судя по скриншоту ТС, нужно 3 - как у меня в скрипте и написано.
|
Отправлено: 03:07, 12-03-2011 | #8 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Не хотелось усложнять скрипт, но придется. Теперь Вам не надо ничего править, кроме (если нужно) путей, по которым находятся Ваши папки.
@echo off setlocal enabledelayedexpansion set "FPattern=D:\страны_образец" set "FIn=D:\страны_разрбрать" set "FOut=D:\страны_разобраны" for /f "delims=" %%a in ('dir /s/b/a-d "%FIn%\*.txt"') do ( for /f "delims=" %%b in ('dir /a-d/b/s "%FPattern%\%%~nxa"') do set "fp=%%~dpb" & call:MoveFile "!fp:~,-1!" "%%a" ) goto:eof :MoveFile if not exist "%FOut%\%~n1" md "%FOut%\%~n1" move %2 "%FOut%\%~n1" exit /b |
Отправлено: 03:45, 12-03-2011 | #9 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Цитата SendMessage:
В реальной задаче каталогов больше. Увеличил, чтобы потом не забыть. Это ведь влияет на глубину просмотра, но не на логику, так что из-за этого дополнительных проблем быть не должно. |
|
Отправлено: 11:32, 12-03-2011 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] переместить файлы по папкам согласно списку | shadowbat | Скриптовые языки администрирования Windows | 9 | 17-11-2023 14:51 | |
[решено] Поиск и запуск приложения согласно условию If... | semiono | AutoIt | 19 | 18-02-2010 00:24 | |
Прочее - Нужна помощь в настройке VMware согласно схеме. | axsi | Сетевые технологии | 4 | 27-03-2009 15:05 | |
Рейтинг обращений к каталогам | ValVlaGen | Программное обеспечение Windows | 0 | 24-04-2008 08:41 | |
Удаление пользователя из группы в АД согласно расписанию | Local.admin | Microsoft Windows NT/2000/2003 | 5 | 09-11-2007 12:48 |
|