2016-06-16 2 views
0

私はフォーマット文字列にしようとしていますときに私は別のエラーを持っている:プレースホルダが文字列内で正しく置き換えられないのはなぜですか?

$dir = "c:\path" 
$logfile = "$dir\logfile_{0}.txt" -f (get-date -format "yyyymmdd_hhmmtt") 

Function Log($message) { 
    $message = "{0}: {1}" -f (get-date) $message 
    write-host $message 
} 

Log "Start processing {0}" -f ($_.FullName) 

私は$logfilec:\path\logfile_20160616_121012.txtことを期待ではなく、私は、このようなc:\path\logfile_20160116_1201nachm.

などの形式は、私が出力16.06.2016 12:01:20 Start Processing Myfile.xlsxLogを期待していますが、代わりに、私は16.06.2016 12:01:20 Start Processing 16.06.2016 12:01:20を取得

私は間違っていますか?

答えて

1

ttをあなたの日付書式設定文字列yyyymmdd_hhmmttの終わりには、AM/PM指定子です。

受信した出力に基づいて、ドイツ語ロケール(Nachmittag = PM)のOSで動作している可能性があります。

秒が必要な場合は、代わりにssを使用してください。 AM/PM指定子がない場合は、おそらく24時間も使用するように切り替えるべきです(hhHHに置き換えてください)。

プレースホルダ内の日付形式の文字列を置くことができます。

"$dir\logfile_{0:yyyymmdd_HHmmss}.txt" -f (Get-Date) 

Log機能では、-fオペレータへの引数は、カンマ区切りにする必要があることに注意してください。

+1

おそらく '' $ dir \ logfile_ {0:yyyymmdd_HHmmss} .txt "'を使いたいでしょう。 24時間の時間がはるかに良い。 –

1
  1. あなたはあなたの最後の行($_.FullName)でパイプラインの変数にアクセスしようとしているが、あなたはそこに任意のパイプラインを使用していません。文字列をLog関数に渡す前に、かっこ内に書式を設定する必要もあります。あなたのLog関数内フォーマットパラメータにカンマが欠落している

  2. $dir = "c:\path" 
    $logfile = "$dir\logfile_{0}.txt" -f (get-date -format "yyyymmdd_hhmmtt") 
    
    Function Log($message) { 
        $message = "{0}: {1}" -f (get-date), $message 
        write-host $message 
    } 
    
    Log ("Start processing {0}" -f $logfile) 
    
+0

ありがとう、これは部分的に役立ちます。私はまだログファイルのための奇妙なファイル名を得る。何かご意見は? – Pr0no

+0

私はこのログファイル名を取得します: 'c:\ path \ logfile_20163316_1233.txt'おそらくあなたが期待しているものですか? –

+0

はい。奇妙な...私はこの奇妙なファイル名を取得し続けます。多分何かが間違っている。 – Pr0no

関連する問題