2016-08-18 1 views
2

メモリカードからファイルへの負荷を回復する必要がありました。私のHDD上の回復されたファイルの名前は "yyyymmdd_hhmmss.mp4"の形式であり、正確な時刻は&であることを示しています。Powershell - ファイルの日付と時刻を変更してファイル名を反映させる

しかし、これらの回復されたファイルの日付変更された列は、「dd/mm/yyyy hh:mm」という形式でかなり異なる日付を表示します(英国にあるように、私はこれらの日付変更スタンプにファイル名を再度反映させたいと思います。私は、変数に日付&時間を抽出するためのPowerShellスクリプトを記述するために始めているが、これは私がこれまで何をやったかである:

foreach ($file in Get-ChildItem *.mp4) 
{ 
    $yy = $file.Name.substring(0,4) 
    $mm = $file.Name.substring(4,2) 
    $dd = $file.Name.substring(6,2) 
    $hh = $file.Name.substring(9,2) 
    $min = $file.Name.substring(11,2) 
    $ss = $file.Name.substring(13,2) 
} 

しかし、PSとの私の経験を反映するために、日付変更した属性を記述することはできませんファイル名。誰かが私を助けることができますか?

種類:

Rob Hughes

答えて

2

「変更日」フィールドを更新するために変更する値は.LastWriteTimeとなります。現在のコードでそれを変更する方法は次のとおりです。

foreach ($file in Get-ChildItem *.mp4) 
    { 
    $yy = $file.Name.substring(0,4) 
    $mm = $file.Name.substring(4,2) 
    $dd = $file.Name.substring(6,2) 
    $hh = $file.Name.substring(9,2) 
    $min = $file.Name.substring(11,2) 
    $ss = $file.Name.substring(13,2) 

    #Create a Date Time object based on the file name 
    $date = get-date -Year $YY -Month $MM -Day $DD -Hour $hh -Minute $min -Second $SS 

    #Echo out to screen 
    Write-Host "Setting $($file.BaseName) dateModified as $($Date.Date)" 
    $file.LastWriteTime = $Date 
    } 

これを行うには、はるかに簡単な方法です。あなたに大きな小道具は、よく行われたようなファイル名から良いビットをsussingのために。

+0

多くのおかげでFoxDeploy。あなたは確かに私にあなたの答えを考えることを何か与えてきました。ロブ。 – user3791201

5

"変更日時"プロパティを設定するには、$file.LastWriteTimeプロパティを更新します。 [datetime]::ParseExact()を使用すると、1回の操作でファイル名から日付と時刻を解析できます。

foreach($file in Get-ChildItem -Filter *.mp4) 
{ 
    $file.LastWriteTime = [datetime]::ParseExact($file.BaseName, 'yyyyMMdd_HHmmss', $null) 
} 
+0

あなたの素早い返答、マティアスに感謝します。あらかじめ2つのテストファイルでコードをテストします。ロブ。 – user3791201

+0

テストディレクトリに一握りのファイルをコピーして実行します:-)不適切な形式のファイル名のために 'ParseExact()'呼び出しが失敗した場合は何も起こりませんが、間違った(ただし有効な)日付形式(つまり、yyyyddMMではなくyyyyMMdd)、間違った結果が生成されます。 –

関連する問題