powershell 用拆分输出替换文件名

dced5bon  于 2023-03-08  发布在  Shell
关注(0)|答案(1)|浏览(185)

我正在尝试使用PowerShell从目录中读取文件名;然后在for循环中:使用分隔符拆分名称;在一个新变量中存储所需的输出。现在我想用这个新变量替换目录中的原始文件名。到目前为止,我已经收集了以下内容和所示的预期输出:

$files = Get-ChildItem -Path C:\Test
write-output $files

目录:C:\Test

1_N04532L_LEFT.JPG
2_N04532R_RIGHT.JPG

代码继续

foreach ($file in $files)
{
   $nameArray = $file -split "_"
   $newName = $nameArray[1]
   write-output $newName
}

N04532L
N04532R

如何完成这一点的任何想法。我不是一个程序员,有很多关于这方面的数据,但它不适合我。

dgsult0t

dgsult0t1#

正如两位评论者已经解释过的,有Rename-Item cmdlet用于重命名文件。
由于此cmdlet可以在其NewName参数中使用scriptblock,因此您可以使用它来创建新文件名。

# adding switch -File makes sure you do not also try to rename subfolders
$files = Get-ChildItem -Path 'C:\Test' -File  
foreach ($file in $files) { 
    $file | Rename-Item -NewName { '{0}{1}' -f ($file.BaseName -split '_')[1], $file.Extension }
}

您可以通过将Get-ChildItem trhough的结果逐个传送到Rename-Item cmdlet来缩短此时间。
因为我们在这里通过管道传输FileInfo对象,所以可以使用$_ automatic变量

# enclose the Get-ChildItem cmd in brackets so this will enumerate the files to completion
# before passing them on to te Rename-Item cmdlet.
# if you don't, files you already have renamed could be picked up and processed again..
(Get-ChildItem -Path 'C:\Test' -File) | 
Rename-Item -NewName { '{0}{1}' -f ($_.BaseName -split '_')[1], $_.Extension }

注意:当重命名文件时,您总是会遇到命名冲突,在这种情况下,您将收到异常

相关问题