使用 PowerShell 1 进行模式匹配

使用 PowerShell 1 进行模式匹配

全部,

我对 Windows 管理员类型的内容不熟悉,但我熟悉 Unix/Linux 等。我有一个简单的 PowerShell 1 脚本,它只应复制符合此命名约定的文件:

Daily_Reviews[1099-9987].journal

我在 $source 中的模式导致错误:“无法找到路径的一部分。”我猜需要知道如何在 PowerShell 环境中进行模式匹配

这是我的代码:

$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

答案1

例如,您可以使用 -matchif ( "$source" -match "Daily_Reviews*" ) { echo Match! }

这接受正则表达式。

无论如何,你试图做的事情都应该用 for 循环来完成,例如

ls Daily_Reviews* > file.txt ; 获取内容 file.txt 同时读取输入,进行复制等......

(我不是 Powershell 粉)

答案2

您可以尝试更多类似的方法:

$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 }

但是,这可能在 PS1 中不起作用。升级到 Powershell 2 是否值得?

这是假设您要传输多个文件 - 您可以用不同的潜在文件名称填充一个数组,然后单独检查每个文件,但像您那样创建变量是行不通的(据我所知)。

相关内容