2016-07-28 2 views
1

Мне нужно, чтобы расширение было добавлено к.. *, Чтобы возвращать все файлы в заданной исходной папке с LastWriteTime из $ lwt, как показано в коде. Пользователь может либо предоставить конкретное расширение, например «.csv», но одно не предусмотрено, тогда скрипт будет просто искать все файлы. Но я не могу сопоставить расширение с «. *», Чтобы вернуть все файлы.Соответствие расширений файлов Powershell. *

[CmdletBinding()] 
param (
[Parameter(Mandatory=$true)][string]$source, 
[Parameter(Mandatory=$true)][string]$destination, 
[string]$exten=".*", 
[int]$olderthandays = 30 
) 
$lwt = (get-date).AddDays(-$olderthandays) 

if(!(Test-Path $source)){ 
    Write-Output "Source directory does not exist." 
    exit 
} 

if(!(Test-Path $destination)){ 
    Write-Output "Source directory does not exist." 
    exit 
} 

if($olderthandays -lt 0){ 
    Write-Output "You can't provide a negative number of days. If you want everything deleted simply provide 0 for number of days." 
    exit 
} 

if(!$exten.StartsWith(".")){ 
    $exten = "."+$exten 
    $exten 
} 


try{ 
    Get-ChildItem $source -ErrorAction Stop | ?{$_.LastWriteTime -lt $lwt -AND $_.Extension -eq $exten} | foreach { 
     Write-Output $_.FullName 
     # Move-item $_.FullName $destination -ErrorAction Stop 
    } 
} 
catch{ 
    Write-Output "Something went wrong while moving items. Aborted operation." 
} 

Как это можно достичь?

+0

Что означает «соответствие расширению» означает «?»? Итак, вроде бы, имя файла «/Users/foo/Documents/bar.*» будет соответствовать? Или что-то еще, потому что «. *» Очень значимо в регулярном выражении. – RamenChef

+0

Я хочу сказать, что любое расширение вроде так .csv, .pdf или что-то еще. – Junaid

ответ

1

Extension файла никогда не будет .*.

Вы можете попробовать:

$exten = "*.$exten" 
Get-ChildItem $source -ErrorAction Stop -Filter $exten | ?{$_.LastWriteTime -lt $lwt} | foreach { ... } 
+0

Спасибо. Это работает. – Junaid

0

Переместите внутренний фильтр обратно в дочерний элемент и использовать . или *.

[CmdletBinding()] 
param 
(
    [Parameter(Mandatory=$true)][string]$source, 
    [Parameter(Mandatory=$true)][string]$destination, 
    [string]$exten="*.*", 
    [int]$olderthandays = 30 
) 
$lwt = (get-date).AddDays(-$olderthandays) 

if(!(Test-Path $source)){ 
    Write-Output "Source directory does not exist." 
    exit 
} 

if(!(Test-Path $destination)){ 
    Write-Output "Source directory does not exist." 
    exit 
} 

if($olderthandays -lt 0){ 
    Write-Output "You can't provide a negative number of days. If you want everything deleted simply provide 0 for number of days." 
    exit 
} 

if(!$exten.StartsWith('*.')){ 
    $exten = "*."+$exten 
    $exten 
} 


try{ 
    Get-ChildItem $source -Filter $exten -ErrorAction Stop | ?{$_.LastWriteTime -lt $lwt} | foreach { 
     Write-Output $_.FullName 
     # Move-item $_.FullName $destination -ErrorAction Stop 
    } 
} 
catch{ 
    Write-Output "Something went wrong while moving items. Aborted operation." 
} 
Смежные вопросы