2017-03-16 43 views
2

我想添加一个换行符不添加整个“诺特尔线的话,这里是我的代码:与换行符字符串连接工作不正常

"-- MANIFEST COUNT -- " >> "C:\psTest\test1.txt" 
$manCount = (Get-ChildItem -filter "*manifest.csv").Count 
$manCount + " `n" >> "C:\psTest\test1.txt" 

我认为+ " `n"将钉断行在伯爵身上,但它没有做任何事情。我也试过+ "`r`n"(我在SO的其他地方发现了这个建议),但无济于事。

回答

1

让我一个解释补充your own solution

因为$manCount的LHS,是[int]型,

$manCount + " `n" 

实际上是相同的:

$manCount + [int] " `n".Trim() 

或:

$manCount + [int] "" 

这是有效地相同:

$manCount + 0 

,因此无操作。

在PowerShell中,表达式的LHS类型决定了RHS将被强制转换的类型(如有必要)。

因此,通过铸造$manCount[string]+然后执行串联,如您预期。

由于Matt指出在你的答案评论,您还可以使用串插

"$manCount `n" 
+0

我来自VB,其中字符串和数字之间的连接将以字符串结尾或引发错误。这返回的数字没有错误,没有换行符,这对我来说并不直观。 –

+0

@ n8。我懂了。 PowerShell的自动类型转换通常非常有用,但它确实有其缺陷。 – mklement0

1

的整数需要被转换为字符串,以便串联采取:

"-- MANIFEST COUNT -- " >> "C:\psTest\test1.txt" 
$manCount = (Get-ChildItem -filter "*manifest.csv").Count 
[string]$manCount + "`r`n" >> "C:\psTest\test1.txt" 
+3

'' “$ manCount'r'n”''也将正常工作。使用诸如“Add-Content”cmdlet之类的东西也可能有帮助。如果没有别的只是为了可读性 – Matt

+0

啊,我不习惯于在这样的字符串中工作的变量。 –