1

すべて「yyyyMMdd」形式の日付で終わるファイルの長いリストがあり、それらを「MMM-yy」に変更する必要があります。これについて最善の方法は何ですか?

'file_one_20120620.pdf' > 'file_one_JUN-12.pdf'

  1. 正規表現を使用して「日付」を見つけます
  2. 日付の抽出と操作
  3. ファイル名を変更する

Joey は以下の Powershell スクリプトを提案しましたが、これは機能するように見えますが、提供されたコードを変更しても壁にぶつかり続けます。どんな助けでも素晴らしいでしょう、ありがとう!

4

3 に答える 3

5

これは、PowerShell を使用して実行できます。

gci | # get files
  foreach {
    $newName = [Regex]::Replace($_.BaseName, '\d{8}$', {
      param($m)
      [datetime]::ParseExact($m.Value, 'yyyyMMdd', $null).ToString('dd-MMM')
    }) + $_.Extension
    Rename-Item $_ $newName
  }
于 2012-06-20T06:43:39.837 に答える
1
Get-ChildItem | # get files
foreach {
$newName = [Regex]::Replace($_.BaseName, '\d{8}$', {
  param($m)
  [datetime]::ParseExact($m.Value, 'yyyyMMdd', $null).ToString('dd-MMM')
}) + $_.Extension
Rename-Item $_ $newName -WhatIf
$_
$newname
}

これは私のテストリストで機能し、gciをget-childItemに変更するだけでした..

What If: ターゲット "アイテム: C:\ab\file_four_20120701.txt 宛先: C:\ab\file_four_01-Jul.txt" で操作 "ファイル名の変更" を実行しています。

What If: ターゲット "アイテム: C:\ab\file_one_20120620.txt デスティネーション: C:\ab\file_one_20-Jun.txt" で操作 "ファイルの名前変更" を実行しています。

What If: ターゲット "アイテム: C:\ab\file_three_20120622.txt 宛先: C:\ab\file_three_22-Jun.txt" で操作 "ファイル名の変更" を実行しています。

What If: ターゲット "アイテム: C:\ab\file_two_20120621.txt 宛先: C:\ab\file_two_21-Jun.txt" で操作 "ファイル名の変更" を実行しています。

于 2012-07-02T06:33:51.397 に答える
0

上記のジョーイのおかげで、これは私の状況にうまくいきます。

次のファイル命名規則に基づきます。

'file_one_20120622.pdf'は'file_one_JUN-22.pdf 'に変換されます

gci | #get files
  foreach {
    $newDate = [DateTime]::ParseExact($_.Name.Split('_')[2].Split('.')[0],'yyyyMMdd',$null).ToString('MMM-yy').ToUpper()
    $newFilename = $_.Name.Split('_')[0] + '_' + $_.Name.Split('_')[1] + '_' + $newDate + ".pdf"
    Rename-Item $_ $newFilename -WhatIf
  }
于 2012-07-02T06:34:46.083 に答える