0

コード:

$date = (Join-path C:\Users\<username>\Desktop\ (Get-Date).toString())
New-Item -Path c:\Users\<username>\Desktop -Name "" + $((Get-Date).toString()) + ".txt" -ItemType file
$reader = [System.IO.File]::OpenText("C:\Users\<username>\Desktop\test.csv")
try {
    for(;;) {
        $line = $reader.ReadLine()
        if ($line -eq $null) { break }
        # process the line
    Add-Content "C:\Users\<username>\Desktop\"($date.txt) -value $line
        $line
    }
}
finally {
    $reader.Close()
}

十数通りの方法で試しましたが、どうすればよいかわかりません。名前の一部として日付が含まれるファイルを作成しようとしています(定期的に数回行うため、ドキュメント用)、ファイルの各行を処理して変更し、新しいファイルに入れます。これを機能させる方法を知っている人はいますか?

編集:わかりましたので、読んでもらいましたが、ほとんど機能します。残念ながら、オブジェクトを正しく呼び出しているとは思いません。

私のコード:

$fileName = '{0:yyyy-MM-dd HH-mm-ss}.html' -f (Get-Date)
New-Item $fileName -itemtype file
Add-content $fileName "<html>"
Add-content $fileName "<head>"
Add-content $fileName "    <title>Call Logs</title>"
Add-content $fileName "<head>"
Add-content $fileName "<body>"
Add-content $fileName "    <div id='header'>"
Add-content $fileName "    </div>"
Add-content $fileName "    <div id='table'>"
Add-content $fileName "        </table>"
Add-content $fileName "        <tr>"
Add-content $fileName "            <th>Date</th>"
Add-content $fileName "            <th>Time</th>"
Add-content $fileName "            <th>Call Type</th>"
Add-content $fileName "            <th>Calling Number</th>"
Add-content $fileName "            <th>Calling Extension</th>"
Add-content $fileName "            <th>Calling Department</th>"
Add-content $fileName "            <th>Called Number</th>"
Add-content $fileName "            <th>Called Extension</th>"
Add-content $fileName "            <th>Called Department</th>"
Add-content $fileName "            <th>Call Connected</th>"
Add-content $fileName "            <th>Duration</th>"
Add-content $fileName "            <th>Queuing Time</th>"
Add-content $fileName "            <th>Account Code</th>"
Add-content $fileName "            <th>Carrier Code</th>"
Add-content $fileName "        </tr>"

import-csv -path 'C:\users\<username>\Desktop\test.csv' |
    foreach-object{
    $newRow = "        <tr><td>$_.Date</td><td>$_.Time</td><td>$_.'Call Type'</td><td>$_.'Calling Number'</td><td>$_.'Calling Extension'</td><td>$_.'Calling Department'</td><td>$_.'Called Number'</td><td>$_.'Called Extension'</td><td>$_.'Called Department'</td><td>$_.'Call Connected'</td><td>$_.Duration</td><td>$_.'Queuing Time'</td><td>$_.'Account Code'</td><td>$_.'Carrier Code'</td></tr>"
        return $newRow

    } |
    Add-content $fileName

$ .Whatever を呼び出すたびに、すべてを取得します。たとえば、$ .Date を呼び出すと、

@{Date=7/1/2012; Time=16:43:06; Call Type=Terminating; Calling Number=XXXXXXXXXX; Calling Extension=; Calling Department=; Called Number=YYYYYYYYYY; Called Extension=XXXX; Called Department=Sales Engineers; Call Connected=No; Duration=0:00:11; Queuing Time=; Account Code=; Carrier Code=}.Date
4

1 に答える 1

3

何が機能していないかは言わないので、一般的な提案をいくつか示します。エラー メッセージや機能していない特定の内容を投稿していただければ、より具体的に説明できます。

コメンターが述べたように、ファイル名で機能する場合と機能しない場合が(Get-Date).ToString()ある のようなものを返します。7/10/2013 7:38:22 AMファイル名で機能することがわかるようにフォーマットする必要があります$fileName = '{0:yyyy-MM-dd-HH-mm-ss}.txt' -f (Get-Date)

次に、PowerShell には、CSV ファイルを読み取ってオブジェクトに変換するImport-Csv関数があります。次に、CSV の各列のプロパティを持つ各オブジェクトを処理して、目的のファイルに必要な文字列を返すことができます。

更新されたスクリプトは次のとおりです。

$fileName = '{0:yyyy-MM-dd-HH-mm-ss}.txt' -f (Get-Date)
$outputFile = Join-Path 'C:\Users\<username>\Desktop' $filename
New-Item $outputFile -ItemType File
Import-Csv -Path 'C:\Users\<username>\Desktop\test.csv' |
    ForEach-Object { 
        "        <tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6}</td><td>{7}</td><td>{8}</td><td>{9}</td><td>{10}</td><td>{11}</td><td>{12}</td><td>{13}</td></tr>" -f `
            $_.Date,$_.Time,$_.'Call Type',$_.'Calling Number',$_.'Calling Extension',$_.'Calling Department',$_.'Called Number',$_.'Called Extension',$_.'Called Department',$_.'Call Connected',$_.Duration,$_.'Queuing Time',$_.'Account Code',$_.'Carrier Code'
    } |
    Add-Content $outputFile
于 2013-07-10T14:42:16.213 に答える