2016-11-30 4 views
1

フォルダがあり、そのフォルダ内にファイル名の一部としてファックス番号を持つ.txtファイル(最初の10文字にはファックス番号が含まれています)があります。各ファイルを個別に読み取るスクリプト

私は、ファックス番号の各ファイル名を読み取って「制御ファイル」に書き込むスクリプトを作成しようとしています。

しかし、は、制御ファイルにすべてのファックス番号を一度に入力することはできません。ファイル1のファックス番号を読み取り、制御ファイルに書き込んだ後、ファイル2に移動し、ファックス番号を読み取り、ファイル2のファックス番号で制御ファイルを上書きする必要があります。

私がこれまでに持っていたスクリプトは、ファックス番号を読み取り、制御ファイルに書き込みますが、すべてのファックス番号を読み取り、それぞれを制御ファイルに追加します。私はそれを一つずつ書く必要があります。

これは私がこれまで持っているものです。

$directory = "C:\Users\blah\Desktop\TestFolder" 
$controlfile = "C:\Users\blah\Desktop\Scripts\control.txt" 

$filename = Get-ChildItem -path $directory -name -filter *.txt 
foreach($file in $directory) 
{ 
    $faxnumber = $filename.substring(0,10) 
    Set-Content $controlfile "<tofaxnum:$faxnumber> 
<toname:XXX> 
<tocompany:XXX> 
<fromname: XXX> 
<fromphone:XXX>" -force 
} 

3つのファイルが$directoryに存在する場合に移動、その後、書き込み後、最初のファイルを見ているとは対照的に、だから、制御ファイルにすべての3つのFAX番号を書き込み、 2番目のファイルに書き込んだ後、3番目に書き込みます。あなたが提供できるどんな助けやアイデアも非常に高く評価されます。あなたは各ファイル名上反復する必要があり

+0

あなたはすべてのFAX番号を書きたくない理由私はあなたを求めることができますすぐに? –

+0

制御ファイルは、別のプロセスがFAXを送信するために使用します。制御ファイルに複数のファックス番号が含まれている場合、ファックスは送信しません。 – zcheong

+0

ああ、大丈夫です。 –

答えて

2

ではなく、ループ内ファイル名を使用してのGet-ChildItemコマンドレットから返さ:

$directory = "C:\Users\blah\Desktop\TestFolder" 
$controlfile = "C:\Users\blah\Desktop\Scripts\control.txt" 

$filenames = Get-ChildItem -path $directory -name -filter *.txt 
foreach($filename in $filenames) 
{ 
    $faxnumber = $filename.substring(0,10) 
    Set-Content $controlfile "<tofaxnum:$faxnumber> 
<toname:XXX> 
<tocompany:XXX> 
<fromname: XXX> 
<fromphone:XXX>" -force 
} 
+0

ニースキャッチ、マーティン。私はその見落としを完全に逃した。 – gravity

+0

私はこれに非常に新しいです、あなたは完全なばかにそれを説明するのと同じ方法でこれを私に説明することができますか? – zcheong

+0

'Get-ChildItem'コマンドレットの結果を' $ filename'に保存しました。だから '$ filename'はファイル名の** list **ですが、一つのファイル名ではありません。だから私は変数を '$ filenames'に変更し、それをあなたの' foreach'ループに入れて、各ファイル名に対して*反復する*ようにしました。したがって、各反復では、現在のファイル名は '$ filename'に格納されます... –

関連する問題