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

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

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

Старожил


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

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


есть разные файлы

и есть список:
3
10
2
7
8
...

как сделать, чтобы BAT:
1. отсортировав файлы по дате создания (! а не по имени)
2. перенес 3 первых в папку "001", 10 следующих в папку "002", потом 2 файла в папку "003" и.т.д. по списку

Отправлено: 10:30, 22-08-2010

 

Googler


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

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

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


KIS 2011 даже чего то там фыркнул на эти 20 строк


поменял:

Код: Выделить весь код
set $from=C:\TEST1
set $dest=C:\TEST2
на

Код: Выделить весь код
set $from=%CD%
set $dest=%CD%
работает из текущего каталога, перемещает все, включая себя же

Отличный получился переносчик! amel27 как всегда на высоте

Отправлено: 13:39, 22-08-2010 | #3


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

Ветеран


Contributor


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

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

Профиль | Отправить 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
сначала ВСЕ файлы переносятся в 001, потом из неё все кроме 3-х в 002, потом все кроме 10 в 003 и т.д. на последнем шаге все "лишние" возвращаются в исходную папку...
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:40, 22-08-2010 | #5


Аватара для gora

Ушёл из жизни


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

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

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


самый первый вариант у меня не сработал, если в имени папки есть пробел. т.е. если работать в верхних уровнях типа C:\111 - работает отлично. как только переходим на более сложное типа С:\Program files\1 11 - все. пишет "файл не найден"

Отправлено: 00:25, 23-08-2010 | #7


Googler


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

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


shadowbat, кавычек в DIR не хватало - добавил
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:05, 23-08-2010 | #8


Старожил


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

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


работает

Отправлено: 11:18, 23-08-2010 | #9


Старожил


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

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


пока что остановился на 4-ом варианте, заменив
Код: Выделить весь код
Set input=%CD%
Set output=%CD%

Отправлено: 15:36, 29-08-2010 | #10



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

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

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




 
Переход