1

我有一个 PowerShell 脚本,它根据文件的各种条件设置标志。为了简洁起见,我会缩写。

$path = "c:\path"
$srcfiles = Get-ChildItem $path -filter *.htm*

ForEach ($doc in $srcfiles) {

$s = $doc.Fullname

Write-Host "Processing :" $doc.FullName

if (stuff) {flag 1 = 1} else {flag 1 = 0}
if (stuff) {flag 1 = 1} else {flag 1 = 0}
if (stuff) {flag 1 = 1} else {flag 1 = 0}

$t = "$s;$flag1;$flag2;$flag2"

Write-Host "Output: " $t

这一切都很好。我的文件处理,标志设置正确,并生成一个整洁的分号分隔行作为 $t。但是,如果我在函数的末尾拍打这两行,

$stream = [System.IO.StreamWriter] "flags.txt"
$stream.WriteLine $t    

我得到这个错误。

Unexpected token 't' in expression or statement.
At C:\CGC003a.ps1:53 char:25
+     $stream.WriteLine $t <<<<
    + CategoryInfo          : ParserError: (t:String) [], ParseException
    + FullyQualifiedErrorId : UnexpectedToken

如果我正在阅读这篇文章,它似乎在write-host我的变量$t到达WriteLine. 不过,在我尝试之前out-file,我想了解$tWrite-Host 之后发生了什么,这阻止Write Line了它被视为有效。还是我还缺少其他东西?

4

2 回答 2

6

尝试:

$stream.WriteLine($t)   

writeline 是streamwriter.net 对象的一种方法。要传递值,您需要将其包含在( )

-如果您需要附加到流写入器,则需要像这样创建它:

$a = new-object 'System.IO.StreamWriter' -ArgumentList "c:\path\to\flags.txt",$true

其中布尔参数可以为 true 以将数据附加到文件或 false 以覆盖文件。

我建议通过完整路径:

$stream = [System.IO.StreamWriter] "c:\path\to\flags.txt"

否则,您将在 .net 当前文件夹中创建文件(如果以管理员身份运行当前的 powershell 控制台,则可能是 c:\windows\system32,以了解它的类型[System.IO.Directory]::GetCurrentDirectory()

于 2013-02-05T19:42:10.127 回答
0

你可以试试

$t > c:\path\to\flags.txt
于 2013-02-05T23:21:10.617 回答