Correspondência de padrões com o PowerShell 1

1

Tudo,

Eu sou novo no material do tipo administrador do Windows, mas estou familiarizado com o Unix / Linux, etc. Eu tenho um script simples do PowerShell 1 que deve copiar apenas arquivos que correspondam a essa convenção de nomenclatura:

Daily_Reviews[1099-9987].journal

Meu padrão em $ source está causando erros: "Não foi possível encontrar parte do caminho". Preciso saber como fazer a correspondência de padrões no ambiente do PowerShell, acho

Aqui está o meu código:

$source = "C:\Users\Tom\Daily_Reviews\[\d\d\d\d\-\d\d\d\d\]\.journal" 
$destination ="C:\Users\Tom\Processed\"

if(-not(Test-Path $destination)){mkdir $destination | out-null}

  Copy-Item $source $destination
    
por Slinky 10.04.2013 / 16:43

2 respostas

1

Você pode usar -match por exemplo if ( "$source" -match "Daily_Reviews*" ) { echo Match! }

Isso aceita regex.

O que você está tentando fazer provavelmente deve ser feito com um loop for, como por exemplo

ls Daily_Reviews * > arquivo.txt; get-content file.txt enquanto lê entrada, faz uma cópia, etc ...

(Eu não sou um cara powershell)

    
por 10.04.2013 / 17:37
0

Você pode tentar algo mais assim:

$source = Join-Path "C:\Users" $env:username
$destination = Join-Path $source "Processed"

if (![System.IO.Directory]::Exists($destination)) {[System.IO.Directory]::CreateDirectory($destination)}

dir -Path $source -file -filter "*.journal" | where { $_ -match "Daily_Reviews\d{4}" } | ForEach-Object { Move-Item -Path $_.fullname -Destination $destination }

No entanto, isso pode não funcionar no PS1. Pode valer a pena atualizar para o Powershell 2?

Isto estava assumindo que você estava procurando transferir mais de um arquivo - você poderia ter igualmente preenchido um array com os diferentes nomes potenciais de arquivos, e verificado cada um individualmente, mas criar a variável como você não funcionaria (para meu conhecimento).

    
por 10.04.2013 / 17:45