|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перемещение файлов по количеству из списка |
|
CMD/BAT - [решено] Перемещение файлов по количеству из списка
|
Старожил Сообщения: 267 |
Профиль | Отправить PM | Цитировать есть разные файлы
и есть список: 3 10 2 7 8 ... как сделать, чтобы BAT: 1. отсортировав файлы по дате создания (! а не по имени) 2. перенес 3 первых в папку "001", 10 следующих в папку "002", потом 2 файла в папку "003" и.т.д. по списку |
|
Отправлено: 10:30, 22-08-2010 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать вариант через временный файл:
@echo off set $list=list.txt set $from=C:\TEST1 set $dest=C:\TEST2 if exist "%~n0.tmp" del "%~n0.tmp" if not exist "%$dest%" md "%$dest%" for /f "usebackq" %%i in ("%$list%") do ( set /a $M+=1 call set $D=00%%$M%% call set $D=%%$D:~-3%% for /l %%a in (1,1,%%i) do call >>"%~n0.tmp" echo.%%$D%% ) for /f "tokens=1* delims=[]" %%i in ('dir /b/a-d/od/tc "%$from%"^|find /n /v ""') do ( for /f "tokens=1* delims=[]" %%a in ('^<"%~n0.tmp" find /n /v ""') do if %%i==%%a ( if not exist "%$dest%\%%b" md "%$dest%\%%b" move "%$from%\%%j" "%$dest%\%%b" ) ) - каталоги "источника" и "приемника" должны быть на одном диске; - сортировка файлов по возрастанию даты (сперва более старые) |
Последний раз редактировалось amel27, 23-08-2010 в 07:01. Отправлено: 12:24, 22-08-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать |
Отправлено: 13:39, 22-08-2010 | #3 |
Ветеран Сообщения: 1272
|
Профиль | Отправить PM | Цитировать shadowbat, вариант №2
@Echo Off SetLocal EnableDelayedExpansion Set Source=C:\Source Set Output=C:\Output Set List=C:\Source\list.txt Set /A Skip=1 For /F "Tokens=1* Delims=:" %%A In ('Type "%List%"^|FindStr /N .') Do ( Set Folder=00%%A Set Folder=!Folder:~-3! Call :CopyFiles "!Skip!" "%%B" Set /A Skip=!Skip!+%%B ) EndLocal GoTo :EOF :CopyFiles Set /A Count=0 For /F "Skip=%~1 Tokens=*" %%A In ('Echo.^&Dir /B /A-D /OD /TC') Do ( Set /A Count+=1 If !Count! LEQ %~2 (XCopy /CFRZY "%Source%\%%A" "%Output%\!Folder!\") ) |
Отправлено: 13:54, 22-08-2010 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать вариант El Sanchez, натолкнул меня на немного извращенный алгоритм, к тому же решающий немного другую задачу, совпадающую с исходной только при изначально пустых или отсутствующих папках 001, 002,...
@Echo Off SetLocal EnableDelayedExpansion Set $list=list.txt Set $from=C:\TEST1 Set $dest=C:\TEST2 Set $F=%$from%& For /F "Tokens=1* Delims=[]" %%i In ('^<"%$list%" Find /N /V ""') Do ( Set $D=00%%i& Set $D=%$dest%\!$D:~-3!& Set /A $S=!$B!+1& Set $B=%%j Call:MOVE& Set $F=!$D!) Set $D=%$from%& Set /A $S=%$B%+1& Call:MOVE& Exit /B :MOVE If Not Exist "%$D%" MD "%$D%" For /F "Skip=%$S% Delims=" %%a In ('Echo.^& DIR /B/A-D/OD/TC "%$F%"') Do Move "%$F%\%%a" "%$D%" Exit /B |
|
Отправлено: 16:40, 22-08-2010 | #5 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Еще вариант, папки могут быть на разных дисках.
@Echo Off SetLocal enabledelayedexpansion Set input=c:\Temp\MAIL Set output=g:\out Set list=list.txt Set Num=0 For /F %%i In (%list%) Do Set /a Num+=1& Set $var!Num!=%%i Set Num=0& Set tNum=0 For /F "UseBackQ Delims=" %%a In (`Dir "%input%" /B /OD /A-D 2^>Nul`) Do ( If !tNum!==0 Call :_rNum xCopy /Y "%input%\%%a" "%output%\!Folder!\" Del /Q "%input%\%%a" Set /a tNum-=1 ) Exit :_rNum Set /a Num+=1 If Not Defined $var%Num% Exit Set tNum=!$var%Num%! Set Folder=00%Num% Set Folder=%Folder:~-3% GoTo :EOF |
Отправлено: 16:54, 22-08-2010 | #6 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать самый первый вариант у меня не сработал, если в имени папки есть пробел. т.е. если работать в верхних уровнях типа C:\111 - работает отлично. как только переходим на более сложное типа С:\Program files\1 11 - все. пишет "файл не найден"
|
Отправлено: 00:25, 23-08-2010 | #7 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать shadowbat, кавычек в DIR не хватало - добавил
|
Отправлено: 07:05, 23-08-2010 | #8 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать работает
|
Отправлено: 11:18, 23-08-2010 | #9 |
Старожил Сообщения: 267
|
Профиль | Отправить PM | Цитировать |
Отправлено: 15:36, 29-08-2010 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Перемещение и удаление файлов по условию и маске | VitHAK | Скриптовые языки администрирования Windows | 14 | 23-12-2013 08:57 | |
Delphi - Перемещение и удаление файлов по маске. | Putin-mode | Программирование и базы данных | 1 | 21-06-2010 12:16 | |
CMD/BAT - [решено] Перемещение устаревших файлов из папки в резервную папку | zavoruev | Скриптовые языки администрирования Windows | 22 | 28-05-2010 14:04 | |
Разное - Перемещение файлов как вид дефрагментации | sltt | Microsoft Windows 2000/XP | 12 | 01-03-2010 20:01 | |
C/C++ - Создание списка файлов | Albreht | Программирование и базы данных | 2 | 20-07-2009 01:17 |
|