![使用 PowerShell 1 进行模式匹配](https://linux22.com/image/609680/%E4%BD%BF%E7%94%A8%20PowerShell%201%20%E8%BF%9B%E8%A1%8C%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D.png)
全部,
我对 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 是否值得?
这是假设您要传输多个文件 - 您可以用不同的潜在文件名称填充一个数组,然后单独检查每个文件,但像您那样创建变量是行不通的(据我所知)。