|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] переместить файлы по папкам согласно списку |
|
CMD/BAT - [решено] переместить файлы по папкам согласно списку
|
Старожил Сообщения: 267 |
Профиль | Отправить PM | Цитировать имеются файлы:
Иванов Иван Иванович_1.* Иванов Иван Иванович_2.* Петров Петр Петрович.* Сидоров Сидр Сидорович.* ... нужно раскидать их по папкам (условие распределения берется из txt файла) txt с условием (заполняет пользователь): Самара: Иванов Иван Иванович_1 Сидоров Сидр Сидорович Москва: Иванов Иван Иванович_2 Петров Петр Петрович а Иванов Иван Иванович_2.* и Петров Петр Петрович.* в папку "Москва" как такое реализовать через CMD/BAT с использованием CurrentDir? |
|
Отправлено: 21:27, 29-06-2010 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать Цитата deepred:
Цитата deepred:
Цитата deepred:
|
|||
Отправлено: 22:18, 29-06-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 140
|
Профиль | Отправить PM | Цитировать Вот такая штука вышла...
Обновил код.... @Echo on && Chcp 1251 && setlocal enabledelayedexpansion set log=%CD%\log.txt set $num=0 set String$=String$ :read for /f "tokens=* delims=" %%a in ('^<"%log%" find /i /v ""') do SET /a $num+=1 && call :func "%%a" set /a X=%$num%+1 & set $num=0 & goto orgcopy :func set String%$num%=%~1 goto :eof :orgcopy set /a $num=%$num%+1 if %$num%==%X% goto :eof set $NSF=!%string$:$=%%$num%! if /i "%$NSF:~-1%"==":" (set $DSF=%$NSF:~0,-1%) else ( copy /v /y "%$NSF%".* %CD%%$DSF% goto :orgcopy) md %CD%\%$DSF% goto :orgcopy |
Последний раз редактировалось deepred, 05-07-2010 в 08:22. Отправлено: 00:29, 30-06-2010 | #3 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать |
Отправлено: 01:44, 30-06-2010 | #4 |
Пользователь Сообщения: 140
|
Профиль | Отправить PM | Цитировать Хм...
То что приведено у тебя в блокноте не верно..., действительно странные пробелы, местами отсутствуют символы "$" и "\". Команды copy и goto не должны быть в одной строке... В общем прикладываю свой батник, у меня все срабатывает как надо.... и на всякий случай обновлю текст батника в посте, попробуй и оттуда снова взять, мне кажется глюк из-за этого может быть... |
|
Последний раз редактировалось deepred, 22-07-2010 в 12:18. Отправлено: 10:45, 30-06-2010 | #5 |
Ветеран Сообщения: 1265
|
Профиль | Отправить PM | Цитировать shadowbat, предложу-ка свой вариант:
@Echo Off SetLocal EnableDelayedExpansion Set Source=C:\Source Set Output=C:\Output Set UsersLog=C:\Source\UsersLog.txt For /F "UseBackQ Tokens=*" %%A In ("%UsersLog%") Do ( Echo %%A|FindStr :>nul&&(Set OutputDir=%%A&MD "%Output%\!OutputDir:~0,-1!" 2>nul)||Move /Y "%Source%\%%A.*" "%Output%\!OutputDir:~0,-1!" 1>nul ) EndLocal |
Отправлено: 11:24, 30-06-2010 | #6 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать deepred, благодарю за файл. срабатывает
(благодаря совету заменил "" %CD%%$DSF% "" на "" %CD%\%$DSF%"") РЕШЕНИЕ1: Chcp 1251 @Echo Off setlocal enabledelayedexpansion set log=%CD%\Список.txt set $num=0 set String$=String$ :read for /f "tokens=* delims=" %%a in ('^<"%log%" find /i /v ""') do SET /a $num+=1 && call :func "%%a" set /a X=%$num%+1 set $num=0 goto orgcopy :func set String%$num%=%~1 goto :eof :orgcopy set /a $num=%$num%+1 if %$num%==%X% goto end set $NSF=!%string$:$=%%$num%! set ch=%$NSF:~-1% Echo %$NSF% %ch% if /i "%ch%"==":" (set $DSF=%$NSF:~0,-1%) else ( move /y "%$NSF%".* %CD%\%$DSF% goto :orgcopy) md %CD%\%$DSF% goto :orgcopy :end chcp 866 El Sanchez, благодарю! просто реализовано.. я добавил currentdir и chcp - работает на ура. РЕШЕНИЕ2: chcp 1251 @Echo Off SetLocal EnableDelayedExpansion Set Source=%CD% Set Output=%CD% Set UsersLog=%CD%\Log.txt For /F "UseBackQ Tokens=*" %%A In ("%UsersLog%") Do ( Echo %%A|FindStr :>nul&&(Set OutputDir=%%A&MD "%Output%\!OutputDir:~0,-1!" 2>nul)||Move /Y "%Source%\%%A.*" "%Output%\!OutputDir:~0,-1!" 1>nul ) EndLocal chcp 866 |
Последний раз редактировалось shadowbat, 30-06-2010 в 17:38. Отправлено: 14:11, 30-06-2010 | #7 |
Пользователь Сообщения: 88
|
Профиль | Отправить PM | Цитировать Уважаемые Знатоки!
Не силен в написании кода, помогите - Вариант 2, из сообщения выше, отлично срабатывал, а теперь при запуске быстро появляется окно cmd и ничего не происходит, дописал в конец кода Pause, но также ничего. Аналогичный запуск на домашнем компе (операционки идентичные = Windows 10 1607 -64) срабатывает отлично. Вариант 1 работает криво - из лога берутся куски русских названий после пробела, некоторые вообще не подхватывает(( |
Отправлено: 10:05, 17-11-2023 | #8 |
Crazy Сообщения: 1177
|
Профиль | Отправить PM | Цитировать Цитата 4zz:
|
|
------- Отправлено: 10:47, 17-11-2023 | #9 |
Пользователь Сообщения: 88
|
Профиль | Отправить PM | Цитировать YuS_2,
Странно: Окно cmd
C:\Users\User>"Desktop\ПАПКИ_АВГ=ПеремОктПостНоя23\по папкам АВГУСТ.bat"
C:\Users\User>chcp 1251 Текущая кодовая страница: 1251 Не удается найти файл C:\Users\User\Log.txt. Текущая кодовая страница: 866 Значит не понимает %CD%? Тогда подкладывю лог туда где не может найти - C:\Users\User\Log.txt. и выдает:
C:\Users\User>"Desktop\ПАПКИ_АВГ=ПеремОктПостНоя23\по папкам АВГУСТ.bat"
C:\Users\User>chcp 1251 Текущая кодовая страница: 1251 Не удается найти указанный файл. |
Отправлено: 14:51, 17-11-2023 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Ошибка - [решено] Не могу переместить AVI файлы через панель инструментов. | kp.Drako | Microsoft Windows 2000/XP | 11 | 12-06-2010 00:36 | |
V. 5.5/2000/2003 - задача по списку рассылки | Yampo | Microsoft Exchange Server | 14 | 18-03-2010 10:11 | |
CMD/BAT - [решено] перемещение каталогов по списку | neprotiv | Скриптовые языки администрирования Windows | 4 | 02-03-2010 09:39 | |
[решено] Замена файлов по списку | Endy1 | Программирование в *nix | 9 | 15-02-2010 13:50 | |
Перемещение по списку в Excel | Evita | Хочу все знать | 3 | 16-03-2006 01:13 |
|