2015-12-07 2 views
0

Я хотел бы скопировать несколько файлов .txt из одной общей папки Windows (может быть 1-10 файлов, той же даты создания) в целевую папку, которая должна быть названа в честь текущего месяца.скрипт для ежемесячного копирования файлов в каталог

source: \\sharename\folder\file01.txt 
target: \\sharename\folder\December\file01.txt 

Что было бы самым быстрым способом архивировать это?

То, что я до сих пор:

Get-ChildItem -Path "\\sharename\folder\" | 
    Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-3) } | 
    Copy-Item -Destination "\\sharename\folder" 

Это просто копирует файлы, которые в порядке, но все скопировать его на ежемесячную новую созданную папку не хватает ... Я просто понятия не имеют

+0

Привет, вы пробовали что-нибудь? Пожалуйста, добавьте код в свой вопрос (вы можете его отредактировать), чтобы мы могли вам помочь :) – sodawillow

+0

get-childitem -Path "\\ sharename \ folder \" | где-object {$ _. LastWriteTime -lt (get-date) .AddDays (-3)} | copy-item -destination "\\ sharename \ folder" так что это просто копирует файлы, которые в порядке, но все «копировать его в ежемесячную новую созданную папку отсутствует» ... я просто не знаю ... – MontanaBlack

ответ

1
Get-Date -UFormat "%B" 

даст вам полное название месяца (см here для получения дополнительной информации)

Затем вы можете использовать его как это:

#store month name 
$month = Get-Date -UFormat "%B" 

#build destination path 
$destination = "\\sharename\folder\$month\" 

#creates the directory if it does not exist 
if(-not (Test-Path $destination)) { 
    New-Item $destination -ItemType Directory | Out-Null 
} 

#copies the item 
Copy-Item -Destination "\\sharename\folder\$month\" 
0

С партией Я верю, что вы можете сделать что-то вроде этого

forfiles -p "\\sharename\folder\" -s -m *.txt /D -30 /C "cmd /c move @file "\\sharename\folder\December\" 

Это должно переместить все файлы с расширением .txt старше 30 дней к вашей целевой-папке. Однако для автоматического создания папок, названных в честь текущего месяца, потребуется гораздо больше, я полагаю. Но если «дата» будет в порядке, вы можете это сделать.

set datetimef=%date:~-4%.%date:~3,2%.%date:~0,2% %time:~0,2%:%time:~3,2%:%time:~6,2% 
if not exist "\\sharename\folder\%datetimef%" mkdir "\\sharename\folder\%datetimef%" 

Это создаст папку типа "ddmmyyyy". Вы можете настроить его, удалив часть «времени: ~ х, х%» части ...

+0

, так что это мое решение так долго: set datetimef =% date: ~ -4% -% date: ~ 3,2% если не существует "\\ sharename \ folder \% datetimef%" mkdir "\\ sharename \ folder \% datetimef% " forfiles -p" \\ sharename \ folder \ source "-s -m * .xml/D -3/C" cmd/c copy @file "\\ sharename \ folder \% datetimef % " и кажется, что это работает ... – MontanaBlack

+0

Отлично. Это должно работать нормально. – MadsTheMan

+0

Вы пропустили заключительную цитату' '' в командной строке 'forfiles'; и вам нужно избежать кавычек по пути после 'cmd/C', например' \ '', или заменить их на '0x22' ... – aschipfl

0

что по этому поводу ...

$Local:LastMonthTimeStamp = Get-Date).AddMonths(-1).ToString("yyyyMM") 
# as string like "201511" for last month 
$Local:SourceBaseDir  = "\\Server\Share\Folder" 
$Local:SourceFileName  = "*.txt" 
$Local:TargetBaseDir  = "\\Server\Share\ArchiveFolder" 
$Local:TargetDirectory = (New-Item -Path (Join-Path -Path$TargetBaseDir -ChildPath $LastMonthTimeStamp) -Type Container -Force).FullName 
# creates the monthly archive folder and returns the target path 
# like: \\Server\Share\ArchiveFolder\201511 

Get-ChildItem -Path $SourceBaseDir -Filter $SourceFileName | Where-Object { 
    ((($_.LastWriteTime).ToString("yyyyMM")) -like $LastMonthTimeStamp) } | ForEach-Object { 
    Copy-Item -Path $_.FullName -Destination$TargetDirectory -Force 
} 
Смежные вопросы