CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц

Аватара пользователя
forza11

CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц

Сообщение forza11 »

Каталог C:\1 в нём хранят .csv файлы за весь год, нужно скопировать все файлы только за сентябрь

файлы такого формата: 20180916.csv, 20180917.csv, 20180918.csv и т.д.
Аватара пользователя
forza11

Re: CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц

Сообщение forza11 »

forza11, смотрим только на имя файла? За сентябрь только этого года?
Аватара пользователя
forza11

Re: CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц

Сообщение forza11 »

Цитата forza11:



Каталог C:\1 в нём хранят .csv файлы за весь год, нужно скопировать все файлы только за сентябрь
CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц




Правильно уточняют выше, точнее описывайте условия. Дату файла берем из имени или из свойств файла?

А так, по описанным условиям:

powershell



Код:

Код: Выделить всё

$src = 'c:\1'
$dst = 'd:\2'
$flt = '*.csv'
copy (dir $src\* -filt $flt -file|?{$_.lastwritetime.month -eq (get-date).addmonths(-1).month}).fullname $dst
Аватара пользователя
YuS_2

Re: CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц

Сообщение YuS_2 »

Цитата:



смотрим только на имя файла? За сентябрь только этого года?




Цитата:



Правильно уточняют выше, точнее описывайте условия. Дату файла берем из имени или из свойств файла?

А так, по описанным условиям:

powershell



Да, дату берём именно из имени файла.
Аватара пользователя
forza11

Re: CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц

Сообщение forza11 »

Цитата forza11:



Да, дату берём именно из имени файла.
CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц




и здесь тоже напишу:

от же студент пошел нонче находчивый: раскидал задание по всем форумам и сиди жди себе, где вперед ответят... отличный подход!

Изображение




Цитата forza11:



дату берём именно из имени файла.
CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц




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

Самый надежный вариант, это по дате последнего изменения, она сохраняется после переименования или даже копирования файла в другое место.
Аватара пользователя
YuS_2

Re: CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц

Сообщение YuS_2 »

forza11, Если только файлы прошлого месяца (месяц берём из имени файла) и если только скопировать, то

Код:

Код: Выделить всё

@Echo Off                                                                                                  %
cls
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_Out"
Set "Ext=csv"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "tNow=%%d"
If %tNow:~4,2%==01 (Set /A Month=%tNow:~0,6%-89) Else (Set /A Month=%tNow:~0,6%-1)
Xcopy /D "%BoxIn%\%Month%??.%Ext%" "%BoxOut%\%Month%\"
pause
Exit /B

Если это не лабораторка, а рабочая проблема, лучше сделать по другому. Пишите письма Изображение
Аватара пользователя
megaloman

Re: CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц

Сообщение megaloman »

Цитата YuS_2:



Правильно уточняют выше, точнее описывайте условия. Дату файла берем из имени или из свойств файла?

А так, по описанным условиям:

powershell
CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц




Этого хватило Изображение большое вам спасибо, и да, я не студент.... Просто вынужден был столкнуться с такой проблемой.

Не сочтите за наглость) Но как можно реализовать тоже самое, только с множеством каталогов, в которых так же нужно выбрать файлы за предыдущий месяц по названию файла?)

Т.е. вместо одного каталога с файлами будет 100 каталогов типа:

С:\1, С:\2, С:\3 и т.д.
Аватара пользователя
forza11

Re: CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц

Сообщение forza11 »

megaloman,
Цитата megaloman:



Если только файлы прошлого месяца (месяц берём из имени файла) и если только скопировать, то
CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц




Работает, благодарю Изображение

И такой же вопрос еще, если возможно как то решить?

Теперь вместо одного каталога С:\1, есть много каталогов С:\1, С:\2, С:\3, С:\4 и т.д. из всех них нужно так же скопировать файлы по названию за предыдущий месяц...
Аватара пользователя
forza11

Re: CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц

Сообщение forza11 »

megaloman,
Цитата megaloman:



1.то есть это реальные имена: 1,2,3...100? Или надо иметь какой-то список папок?

2.Куда при этом должны копироваться файлы? В какие папки?

3. Вы уверены, что файлы надо именно копировать, а не перемещать?

4. Не лучше ли сделать не простое копирование файлов, а архивацию, например, посредством winrar или 7z
»




1 - это не реальные имена, реальные будут по названию мак-адресов типа: С:\СС8B552D6666

2 - файлы должно копироваться в такие же каталоги, только в другое место соответственно, т.е. С:\СС8B552D6666 > R:\СС8B552D6666 (каталоги могу сам создать заранее скриптом)

3 - именно копировать)

4 - архивация не нужна, они уже бэкапятся эти файлы, просто нужно скопировать много файлов из множества каталогов)
Аватара пользователя
forza11

Re: CMD/BAT - копирование всех фалов за определённый (прошедщий) месяц

Сообщение forza11 »

forza11,

Код:

Код: Выделить всё

@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_Out"
Set "Ext=csv"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "tNow=%%d"
If %tNow:~4,2%==01 (Set /A Month=%tNow:~0,6%-89) Else (Set /A Month=%tNow:~0,6%-1)
Call :@ СС8B552D6666
Call :@ СС8A552D8888
Call :@ СС8C552D9999
Call :@ СF8B552D7777
pause
GoTo :Eof
:@
	If Exist "%BoxIn%\%1\%Month%??.%Ext%" Xcopy /D "%BoxIn%\%1\%Month%??.%Ext%" "%BoxOut%\%1\%Month%\" >nul
GoTo :Eof

Пропишите свои пути без \ на конце. Для Вашей постановки инбокс указывать C:


Или так

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_Out"
Set "Ext=csv"
Set Mac=СС8B552D6666 СС8A552D8888 СС8C552D9999 СF8B552D7777
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "tNow=%%d"
If %tNow:~4,2%==01 (Set /A Month=%tNow:~0,6%-89) Else (Set /A Month=%tNow:~0,6%-1)
FOR %%i IN (%Mac%) DO Call :@ %%i
pause
GoTo :Eof
:@
	If Exist "%BoxIn%\%1\%Month%??.%Ext%" Xcopy /D "%BoxIn%\%1\%Month%??.%Ext%" "%BoxOut%\%1\%Month%\" >nul
GoTo :Eof





forza11, Будьте корректны при описании папок. Если это мак-адреса, то там не могут быть кириллические символы, а в Вашем примере C - русское
Ответить

Вернуться в «Скриптовые языки администрирования Windows»