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として生成されます。ただし、関数の最後でこれらの2行を叩くと、

$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変数がフラッシュされたように見えます。ただし、試す前に、Write-Hostの後に何が起こって、それが有効であると見なされないのかを理解したいと思います。それとも私が見逃しているものが他にありますか?$tWriteLineout-file$tWrite 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 に答える