PDA

Показать полную графическую версию : [решено] как скопировать файлы 1,2,3 в папки x,y,z соответственно


shadowbat
20-05-2010, 22:40
имеются файлы 0001, 0002, 0003 ..... 0300
и папки x1 x2 x3 ...x300

как скопировать:
0001 в x1
0002 в x2
0300 в x300

(названия у файлов именно 0001, 0002, 0003 а у папок названия все разные. нужно первый файл в первую по счету папку, второй файл во вторую по счету и т.д.)

amel27
21-05-2010, 08:50
так как способ подачи списков не оговорен, пусть они будут в файлах files.txt и dirs.txt:

@Echo Off

Set $F=files.txt
Set $D=dirs.txt

For /F "Tokens=1* Delims=[]" %%i In ('^<"%$F%" Find /V /N ""') Do (
For /F "Tokens=1* Delims=[]" %%a In ('^<"%$D%" Find /V /N ""') Do (
If "%%i"=="%%a" Echo COPY "%%~j" "%%~b"))


P.S. предполагается, что батник в каталоге с файлами, т.к. не оговорено иное

shadowbat
21-05-2010, 09:37
хм... батник пишет что скопировал но не копирует. папки пустые.
http://img9.imageshack.us/img9/2199/549359011.th.jpg (http://img9.imageshack.us/img9/2199/549359011.jpg)

вот список части папок
http://img339.imageshack.us/img339/857/51063301.th.jpg (http://img339.imageshack.us/img339/857/51063301.jpg)

нужно скинуть
1.txt в 1 Обучающий видеокурс по Microsoft Office 2003
2.txt в 2 Обучающий видеокурс по Microsoft Office 2007
и т.д.

файлы txt находятся в той же папке, что и сами папки (как на тестовом примере на первой картинке)

amel27
21-05-2010, 11:53
батник пишет что скопировал но не копирует »
уберите "Echo", осталось от проверки =)

shadowbat
21-05-2010, 12:55
уберите "Echo", осталось от проверки »
работает!

в папки с двумя и более словами в названии копирует
в папки с цифрами копирует
в папки с англ.буквами копирует

а вот в папки с русскими буквами не копирует, а создает вместо этого файл с названием папки. это лечится?

amel27
21-05-2010, 13:00
shadowbat, списки папок/файлов должны быть в родной для CMD DOS-кодировке (866)

shadowbat
21-05-2010, 13:07
amel27, я бы не понял это сообщение :) но пока я ждал ответ полез в гугл и нашел эту ветку на нашем форуме
http://forum.oszone.net/thread-169373.html

решение: В начале добавляем chcp 1251, в конце chcp 866
либо
решение: редактировать .bat в редакторе типа bred.


теперь все заработало!!
amel27, благодарю!

ИТОГОВОЕ РЕШЕНИЕ:
chcp 1251
@Echo Off

Set $F=files.txt
Set $D=dirs.txt

For /F "Tokens=1* Delims=[]" %%i In ('^<"%$F%" Find /V /N ""') Do (
For /F "Tokens=1* Delims=[]" %%a In ('^<"%$D%" Find /V /N ""') Do (
If "%%i"=="%%a" COPY "%%~j" "%%~b"))
chcp 866




© OSzone.net 2001-2012