gpt4 book ai didi

windows - 如何使用文件名中现有的 Unix 时间重命名多个文件?

转载 作者:可可西里 更新时间:2023-11-01 11:24:01 26 4
gpt4 key购买 nike

虽然我知道如何在 PHP 中执行此操作,但安装 IIS 没有意义,安装 PHP 只是为了完成此操作。

我有一个文件夹D:\Data,里面有几个子文件夹。这些文件夹包含的文件是使用程序创建的备份,该程序在名称中添加时间戳以允许备份文件的多个副本。

这些文件需要命名:

usera.dat

但他们目前的名字是:

usera.dat.17383947323.dat  

在 PHP 中,我会将文件名加载到一个字符串中,在“.”上分解字符串,然后使用 [0] 和 [3] 元素重命名文件以重命名文件,即没有循环读取目录:

$filename = $existing_file
$explodename = explode(".",$filename);
$newfilename = $explodename[0] . "." . $explodename[3];
rename($filename, $newfilename);

对于如何使用 PowerShell 或循环处理 D:\Data 中所有子文件夹的批处理文件,有没有人有任何建议?

现在我正在手动编辑每个文件,删除多余的 Unix time stamp.dat 部分。

最佳答案

将此从 PHP 转换为 PowerShell 应该是一件轻而易举的事,让我们试一试:

$files = Get-ChildItem -Filter *.dat.*.dat

foreach($file in $files){
$filename = $file.Name
$explodename = $filename.Split('.')
$newfilename = "$($explodename[0]).$($explodename[3])"
Rename-Item $file.FullName -NewName $newfilename
}

如上图:

  • PowerShell 没有explode() 函数,但我们可以对任何字符串使用String.Split() 方法并返回一个字符串数组
  • . 不是 PowerShell 中的字符串连接运算符,但我们可以在可扩展字符串中使用子表达式 $(...)
  • Rename-Item cmdlet 将负责重命名

不过,更符合 PowerShell 习惯的解决方案是利用管道:

Get-ChildItem -Filter *.dat.*.dat | Rename-Item -NewName {$explodename = $_.Name.Split('.');"$($explodename[0]).$($explodename[3])"}

您还可以使用正则表达式模式代替 Split() 方法和字符串连接:

Get-ChildItem -Filter *.dat.*.dat | Rename-Item -NewName {$_.Name -replace '^([^\.])\..*\..*\.([^\.])$','$1.$2'}

或者用 -join 运算符进行连接:

Get-ChildItem -Filter *.dat.*.dat | Rename-Item -NewName {$_.Name.Split('.')[0,3] -join '.'}

无论您喜欢什么,Get-ChildItemRename-Item 绝对是您想要在这里使用的命令

关于windows - 如何使用文件名中现有的 Unix 时间重命名多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47857155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com