在Powershell中,如何将文件从一个目录复制到另一个同名目录,并修改文件名?

fdbelqdn  于 2023-01-26  发布在  Shell
关注(0)|答案(2)|浏览(211)

我在D:\上有一个驱动器,其中的文件夹和文件布局如下:“ThisFolder\ThisFolder09.mp3”和“OtherFolder\OtherFolder13.mp3”
我需要将它们复制到E:\,该文件夹包含以下文件夹(此处我使用以前的名称)“ThisFolder\ThisFolder.mp3”和“OtherFolder\OtherFolder.mp3”
末尾的数字永远不会超过2位数,它们是周数;因为一年大约有52周,比如第二周就是一年的第二周。
以这个文件夹为例,我需要将“D:\这个文件夹\这个文件夹09.mp3”复制到“E:\这个文件夹\这个文件夹.mp3”
我考虑过使用Copy-Item进行复制,但我找不到如何从文件名中删除周数。

pcww981p

pcww981p1#

您可以使用-replace '\d+$'删除文件.BaseName(不带扩展名的文件名)的结尾数字。例如:

$source      = 'D:\ThisFolder'
$destination = 'E:\ThisFolder'

Get-ChildItem $source -File -Filter *.mp3 | Copy-Item  -Destination {
    Join-Path $destination (($_.BaseName -replace '\d+$') + $_.Extension)
}
siv3szwd

siv3szwd2#

X1 E0 F1 X提供了关于按需修改文件 * 名称 * 的关键指针。
要解决希望保持 * 目录路径 * 与输入文件中的相同,但在 * 不同的驱动器*上的问题,请使用以下命令-假设目标驱动器上的目标目录已经存在

$sourceDrive = 'D:'
$destDrive = 'E:'

Get-ChildItem -File -Recurse -LiteralPath "$sourceDrive\" -Filter *.mp3 |                            #" (to fix broken syntax highlighting)
  Copy-Item -Destination {
    $_.FullName -replace "^$sourceDrive", $destDrive -replace '\d+(?=\.mp3$)' 
  } -WhatIf

注:上述命令中的-WhatIf公共参数 * 预览 * 操作。删除-WhatIf,并在确定操作将执行所需操作后重新执行。

**如果需要在目标驱动器上 * 按需 * 创建目标目录,**则需要做更多工作:

$sourceDrive = 'D:'
$destDrive = 'E:'

Get-ChildItem -File -Recurse -LiteralPath "$sourceDrive\" -Filter *.mp3 |                            #" (to fix broken syntax highlighting)
  Copy-Item -Destination {
    $destDir = (New-Item -ErrorAction Stop -Force -Type Directory ($_.DirectoryName -replace "^$sourceDrive", $destDrive).FullName
    Join-Path $destDir ($_.BaseName -replace '\d+$' + $_.Extension) 
  }

相关问题