Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] переместить файлы по папкам согласно списку

Ответить
Настройки темы
CMD/BAT - [решено] переместить файлы по папкам согласно списку

Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


имеются файлы:
Иванов Иван Иванович_1.*
Иванов Иван Иванович_2.*
Петров Петр Петрович.*
Сидоров Сидр Сидорович.*
...

нужно раскидать их по папкам (условие распределения берется из txt файла)
txt с условием (заполняет пользователь):
Код: Выделить весь код
Самара:
Иванов Иван Иванович_1
Сидоров Сидр Сидорович

Москва:
Иванов Иван Иванович_2
Петров Петр Петрович
т.е. cmd перемещает Иванов Иван Иванович_1.* и Сидоров Сидр Сидорович.* в папку "Самара"
а Иванов Иван Иванович_2.* и Петров Петр Петрович.* в папку "Москва"

как такое реализовать через CMD/BAT с использованием CurrentDir?

Отправлено: 21:27, 29-06-2010

 

Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата deepred:
А почему с использованием CD?
CD - это currentdir? имеется ввиду чтобы BAT/CMD работал с текущей папкой, в которой сам находится, чтобы не писать лишний раз папку для работы

Цитата deepred:
вид файла именно такой, т.е. заголовки с городами могут менять место?
не понял вопроса. список городов произвольный, задается пользователем. т.е. может быть и 1 и 5 городов

Цитата deepred:
города конечно же могут быть любые?
именно те, которые пользователь напишет в txt-файле, такие папки и создавать

Отправлено: 22:18, 29-06-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 140
Благодарности: 92

Профиль | Отправить 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
Если нужно перемещение, а не копирование, то достаточно заменить "copy /v /y" на "move /y". Ключ /y нужен для перезаписывания файлов в целевом каталоге без запроса

Последний раз редактировалось deepred, 05-07-2010 в 08:22.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:29, 30-06-2010 | #3


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


хм..
1й вариант с русскими именами и двумя вариантами текста батника из-за странной кучи пробелов в строчке 23-24 перед "goto"


2й вариант с английскими именами и с удаленным chcp 1251


в обоих случаях папки не создаются

Отправлено: 01:44, 30-06-2010 | #4


Пользователь


Сообщения: 140
Благодарности: 92

Профиль | Отправить PM | Цитировать


Хм...

То что приведено у тебя в блокноте не верно..., действительно странные пробелы, местами отсутствуют символы "$" и "\". Команды copy и goto не должны быть в одной строке...

В общем прикладываю свой батник, у меня все срабатывает как надо.... и на всякий случай обновлю текст батника в посте, попробуй и оттуда снова взять, мне кажется глюк из-за этого может быть...

Последний раз редактировалось deepred, 22-07-2010 в 12:18.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:45, 30-06-2010 | #5


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1265
Благодарности: 1025

Профиль | Отправить 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
Благодарности: 8

Профиль | Отправить 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

4zz 4zz вне форума

Пользователь


Сообщения: 88
Благодарности: 3

Профиль | Отправить PM | Цитировать


Уважаемые Знатоки!
Не силен в написании кода, помогите - Вариант 2, из сообщения выше, отлично срабатывал, а теперь при запуске быстро появляется окно cmd и ничего не происходит, дописал в конец кода Pause, но также ничего.
Аналогичный запуск на домашнем компе (операционки идентичные = Windows 10 1607 -64) срабатывает отлично.
Вариант 1 работает криво - из лога берутся куски русских названий после пробела, некоторые вообще не подхватывает((

Отправлено: 10:05, 17-11-2023 | #8


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1177
Благодарности: 491

Профиль | Отправить PM | Цитировать


Цитата 4zz:
из сообщения выше, отлично срабатывал, а теперь при запуске быстро появляется окно cmd и ничего не происходит, дописал в конец кода Pause, но также ничего. »
Запустите окно cmd, а из него уже сам пакетный сценарий.

-------
scio me nihil scire. Ѫ


Отправлено: 10:47, 17-11-2023 | #9

4zz 4zz вне форума

Пользователь


Сообщения: 88
Благодарности: 3

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] переместить файлы по папкам согласно списку

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ошибка - [решено] Не могу переместить 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




 
Переход