我正在尝试导入 CSV文件并循环遍历所有条目以搜索匹配项(文件名也将在名称中包含其他字符串),之后,我希望它将匹配项放入适当的目录,以CSV文件命名
例如:
我有的文件:
Rapport PTP(12314)
测试(124523)
我想:
./ 12314 / Rapport PTP(12314)
./ 12314 / Rapport PTP(12453)
我的CSV文件包含需要通过目录搜索的所有数字。
编辑:到目前为止,我已经想出了这个,但由于某些原因,它只是假装......Set-Location "d:\PTP"
$Folders = Import-Csv D:\data\Documents\buse1.csv
$FileList = Get-ChildItem -Path D:\PTP
ForEach ($Folder in $Folders) {
foreach ($File in $FileList) {
$contains = $File.Name -like "*$($Folder.Name)*"
if ($contains) {
$Destination = 'd:\test1\{0}' -f, $folder.name;
mkdir -Path (Split-Path -Path $Destination -Parent) -ErrorAction SilentlyContinue;
Move-Item -Path $folder.Name -Destination $Destination -WhatIf;
}
}
}
答案 0 :(得分:0)
这就是你的逻辑之旅:
$File.Name -contains $Folder.Name;
if($contains){
# ...
}
-contains
适用于集合(数组,列表,枚举),但不进行子字符串搜索:
PS> "Long","string" -contains "string"
True
PS> "Long string" -contains "string"
False
在进行字符串比较时使用-match
或-like
:
$File.Name -like "*$($Folder.Name)*"
或:
$File.Name -match [regex]::Escape($Folder.Name)
此外,$contains
不存在 - 您需要为其if()
语句分配比较结果:
$contains = $File.Name -like "*$($Folder.Name)*"
if($contains){
# We got a match!
}
或执行里面的 if()
语句:
if($File.Name -match [regex]::Escape($Folder.Name)){
# We got a match!
}