首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用XML重命名PowerShell文件

用XML重命名PowerShell文件
EN

Stack Overflow用户
提问于 2021-06-11 00:11:39
回答 1查看 190关注 0票数 0

目前,我有一个文件夹C:\Call Archive\,它的XML文件名为index.xml,还有大量的.wav文件,所有这些文件的名称在您查看它时都没有任何意义。像AT1_ID1_TT3_ID6-1623089222.5534.WAV这样的名字

我想要做的是采用XML结构,并根据XML中的标记重命名每个.wav文件。

来源数据:

代码语言:javascript
复制
<all>
  <recording_index recapp_id="" recapp_name="" last_generated="0">
    <day_index date="2021-06-07">
      <recording target_name="Unknown recording" filename="warning%3A" filesize="0" date="1969-12-31 19:00" source="" destination=""/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623089222.5534.WAV" filesize="40K" date="2021-06-07 14:07" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623089304.5536.WAV" filesize="42K" date="2021-06-07 14:08" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623091000.5538.WAV" filesize="11K" date="2021-06-07 14:36" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623091138.5540.WAV" filesize="14K" date="2021-06-07 14:39" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623091201.5542.WAV" filesize="14K" date="2021-06-07 14:40" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623091227.5544.WAV" filesize="43K" date="2021-06-07 14:41" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623091276.5546.WAV" filesize="31K" date="2021-06-07 14:41" source="John Doe" destination="5555512345"/>
    </day_index>
  </recording_index>
</all>

理想的文件名应该是06-07-2021_John Doe_5555512345.wav。注意,如果可能的话,日期将采用MM-DD-YYYY格式。

什么都能帮上忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-11 02:25:49

您只需要遍历并执行重命名。如下所示:

代码语言:javascript
复制
# Establishing test data:
$XML = 
@"
<all>
  <recording_index recapp_id="" recapp_name="" last_generated="0">
    <day_index date="2021-06-07">
      <recording target_name="Unknown recording" filename="warning%3A" filesize="0" date="1969-12-31 19:00" source="" destination=""/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623089222.5534.WAV" filesize="40K" date="2021-06-07 14:07" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623089304.5536.WAV" filesize="42K" date="2021-06-07 14:08" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623091000.5538.WAV" filesize="11K" date="2021-06-07 14:36" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623091138.5540.WAV" filesize="14K" date="2021-06-07 14:39" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623091201.5542.WAV" filesize="14K" date="2021-06-07 14:40" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623091227.5544.WAV" filesize="43K" date="2021-06-07 14:41" source="John Doe" destination="5555512345"/>
      <recording target_name="10 Digit Dialing" filename="AT1_ID1_TT3_ID6-1623091276.5546.WAV" filesize="31K" date="2021-06-07 14:41" source="John Doe" destination="5555512345"/>
    </day_index>
  </recording_index>
</all>
"@

$XML = [XML]$XML

# This is the real work:
$xml.all.recording_index.day_index.recording |
ForEach-Object{
    $Date = (Get-Date $_.Date).ToString('MM-dd-yyyy')
    $Newname = "{0}_{1}_{2}.{3}" -f $Date, $_.source, $_.destination, $_.filename.Split('.')[-1]
    $Newname
    Rename-Item -Path $_.filename -NewName $Newname
}

对于您感兴趣的每个XML元素,只需将属性连接起来以获得新名称,然后使用Rename-Item执行重命名。我对文件位置有点怀疑,因为原始文件的完整路径不在XML中。您可能需要使用这些文件从目录或CD运行到目录。

我也关心命名碰撞。我不知道这是否只是一个样本数据的函数,如果是一个问题,您可能需要获得更细粒度的时间戳,以确保唯一的文件名。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67929818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档