Powershell检查CSV文件中是否存在变量
我有一个PS脚本,它循环遍历文件文件夹并归档其中的一些:Powershell检查CSV文件中是否存在变量,powershell,csv,compare,string-comparison,Powershell,Csv,Compare,String Comparison,我有一个PS脚本,它循环遍历文件文件夹并归档其中的一些: $CSV = import-csv -path C:\folder\Builds\ApplicationsMappingNew.csv $Application = $CSV.Application $GetAppPath = Get-ChildItem -Path $DestinationDir\Server\* foreach($line in $GetAppPath){ $AppPath = $Line.ful
$CSV = import-csv -path C:\folder\Builds\ApplicationsMappingNew.csv
$Application = $CSV.Application
$GetAppPath = Get-ChildItem -Path $DestinationDir\Server\*
foreach($line in $GetAppPath){
$AppPath = $Line.fullname
$AppName = Split-Path $AppPath -Leaf
$RAR_Destination = "C:\folder\Builds\test1\SOA-ConfigurationManagement"+"\"+"$AppName"+"_st-FTP.rar"
Push-Location $AppPath
& "C:\Program Files (x86)\WinRAR\rar" a -r $RAR_Destination
}
我有一个CSV文件,它有一个应用程序列:
我的问题是-在foreach
循环中,如何将$Appname
循环变量值与$Application
数组变量中的值进行比较
并且,如果
$AppName
的值等于$Application
数组中的值,则执行推送位置
并执行winrar
命令。如果没有,请跳到foreach($GetAppPath中的行)
?中的下一个元素,使用@mklement0提示,我已经组装了以下解决方案:
$CSV = import-csv -path C:\test\ApplicationsMappingNew.csv
$Application = $CSV.Application
$GetAppPath = Get-ChildItem -Path $DestinationDir\Server\*
foreach($line in $GetAppPath){
$AppPath = $Line.fullname
$AppName = Split-Path $AppPath -Leaf
$Appswitch = "$AppName"+"*"
$RAR_Destination = "C:\folder\Builds\test1\SOA-ConfigurationManagement"+"\"+"$AppName"+"_st-FTP.rar"
switch ($Appswitch) {$Application -like $_} {
Push-Location $AppPath
&"C:\Program Files (x86)\WinRAR\rar" a -r $RAR_Destination
}
default {Write-Host "Application $AppName is not in csv file."}
}
回答所问问题: 如果
$AppName
的值等于$Application
数组中的值
使用以下任一测试:
如果($AppName-in$Application){。。。
如果($Application-包含$AppName){。。。
上面执行文本、整值、不区分大小写的匹配,以查看$AppName
是否包含在数组$Application
中(匹配元素)-有关详细信息,请参阅底部部分
基于,您实际需要的不是相等比较,而是通配符匹配 您可以使用
-like
操作符,因为-与许多PowerShell比较操作符一样,它可以对数组(集合)进行操作:
请注意,这与使用数组值LHS的-like
略有不同,它不返回布尔值,而是充当数组过滤器;也就是说,它返回匹配元素的数组;如果没有匹配项,则得到一个空数组
但是,由于PowerShell,返回的数组可以像布尔值一样处理,因此如果没有匹配的元素(空数组),则条件有效地为$false
,如果至少有一个匹配的元素(非空数组和非空字符串),则条件有效地为$true
PowerShell的安全壳运算符,
-in
和-contains
:
PowerShell提供两个(系列):
(否定也存在:-in
)-notin
(否定也存在:-contains
)-notcontains
的每个元素执行
的-eq
测试,并返回布尔值($true
或$false
),以指示集合中是否(至少)有一个元素与潜在成员匹配
对于字符串,与-eq
一样,使用文本、整值、不区分大小写的匹配,针对潜在成员测试每个元素
有关这些运算符的更多信息,请参阅。这有点复杂。您可以使用
switch($Application)-Wildcard{$Appswitch{…}
,但请注意,在您的情况下,只需使用if($Application-like$Appswitch){…}
就足够了。
if ($Application -like "$AppName*") { ... }