powershell - 在 Powershell 中替换部分文件名

标签 powershell for-loop replace rename

我一直在 PowerShell 中重命名文件夹中超过 5 天的所有文件。

文件名全部读作:

XTYPE  -to-  CoOrd & WBS - 20140313
XTYPE  -to-  CoOrd & WBS - 20140314

等等。 偶尔会出现一些轻微的异常,例如:

XTYPE  -to-  CoOrd & WBS - 20140316 - do not use
XTYPE  -to-  CoOrd & WBS - 20140314 (AutoSaved)

现在我只想从每个文件中删除“&WBS”(所有文件都以 Excel 格式保存,因此文件将是)

XTYPE  -to-  CoOrd- 20140313
XTYPE  -to-  CoOrd- 20140314
XTYPE  -to-  CoOrd- 20140316 - do not use
XTYPE  -to-  CoOrd- 20140314 (AutoSaved)

现在我的代码到目前为止我相信已经足够接近了......

$myFolder = '\\iiGlasgow.co.uk\public\Controls\Archived Files\'
ForEach ($File in Get-Childitem $myFolder | Where-Object { $_.LastWriteTime   -lt (get-date).AddDays(-5)})

所以我设置了文件夹并建议 PowerShell 仅处理 5 天以上的项目。

但是我无法让它替换部分字符串元素...它可能非常简单,我只是看不到它。我已经在互联网上搜索并尝试了各种迭代,但它没有发生。

所以我认为我的最终元素最接近解决方案,然后阅读...

{
$myFile = $file.name
$myFullFilename = $file.FullName
$myRenamed = $myFile.Replace(" & WBS ","") 
}

为了方便起见,整个脚本?

$myFolder = '\\iiGlasgow.co.uk\public\Controls\Archived Files\'
ForEach ($File in Get-Childitem $myFolder | Where-Object { $_.LastWriteTime   -lt (get-date).AddDays(-5)})
{
$myFile = $file.name
$myFullFilename = $file.FullName
$myRenamed = $myFile.Replace(" & WBS ","") 
}

一如既往地感谢您的帮助和对我错误的指出!

最佳答案

我将扩展 Where-Object cmdlet 并过滤所有包含 & WBS 的基本名称。然后只需使用 Rename-item cmdlet 重命名该文件即可:

$myFolder = '\\iiGlasgow.co.uk\public\Controls\Archived Files\'
Get-Childitem $myFolder | 
    Where-Object { $_.LastWriteTime -lt (get-date).AddDays(-5) -and $_.BaseName -Match ' & WBS ' } | 
    Foreach {
        $_ | Rename-Item -NewName ($_.Name -replace ' & WBS ')
    }

关于powershell - 在 Powershell 中替换部分文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38119917/

相关文章:

c - Win32/C : Convert line endings to DOS/Windows format

shell - 使用 shell 将字符串 "//"替换为 "///"

powershell - 设置 HomeDirectory 值时强制 Powershell 创建 AD 用户文件夹

powershell - 如何使用 PowerShell 在 Azure Function 中加载文件

powershell - powercli/powershell 导入 csv 和嵌套循环

c - c中的for循环只能有一条语句吗?

c - 使用 openMP 并行化嵌套 for 循环

Java for 线程中的循环

正则表达式添加尾随零

powershell - 将字符串转换为时间跨度