string比较不能在PowerShell函数中工作 – 我做错了什么?

我试图做一个别名的git commit也将日志logging到一个单独的文本文件。 但是,如果git commit返回"nothing to commit (working directory clean)" ,它不应该logging任何东西到单独的文件。

这是我的代码。 git commit别名的作品; 输出到文件的作品。 但是,无论从git commit返回什么,它都会logging消息。

 function git-commit-and-log($msg) { $q = git commit -a -m $msg $q if ($q –notcontains "nothing to commit") { $msg | Out-File w:\log.txt -Append } } Set-Alias -Name gcomm -Value git-commit-and-log 

我正在使用PowerShell 3。

Solutions Collecting From Web of "string比较不能在PowerShell函数中工作 – 我做错了什么?"

$q包含每行Git的stdout的字符串数组。 要使用-notcontains您需要匹配数组中项目的完整字符串,例如:

 $q -notcontains "nothing to commit, working directory clean" 

如果要测试部分字符串匹配,请尝试使用-match运算符。 (注意 – 它使用正则表达式并返回匹配的字符串。)

 $q -match "nothing to commit" 

如果左边的操作数是一个数组,那么-match会起作用。 所以你可以使用这个逻辑:

 if (-not ($q -match "nothing to commit")) { "there was something to commit.." } 

还有一种选择是使用-notlike /不-notlike运算符。 这些接受通配符,不使用正则表达式。 匹配(或不匹配)的数组项将被返回。 所以你也可以使用这个逻辑:

 if (-not ($q -like "nothing to commit*")) { "there was something to commit.." } 

只是注意, -notcontains操作符并不意味着“字符串不包含子字符串”。 这意味着“收集/排列不包含项目”。 如果“git commit”命令返回一个单一的字符串,你可以尝试这样的:

 if ( -not $q.Contains("nothing to commit") ) 

即使用String对象的Contains方法,如果一个字符串包含一个子字符串,则返回$ true。

法案