我是非常新的powershell,我试图创建一个脚本,将循环通过所有的子文件夹的一个文件夹,然后为每个子文件夹循环通过所有的文件和任何超过2天的旧复制到一个新的位置。下面是我目前的脚本,但我一直得到一个错误“方法调用失败,因为[System.IO.DirectoryInfo]不包含名为'replace'的方法”。有人知道我做错了什么吗
$RootFolder = "H:\route\Backup\Full_Backups"
$SubFolders = Get-ChildItem -Path $RootFolder -Directory
Foreach($SubFolder in $SubFolders)
{
$NewPath = $SubFolder.replace('H:\', 'T:\')
$threshold = (Get-Date).AddDays(-2)
foreach ($SubFolder in Get-ChildItem -LiteralPath $path -Directory) {
# Construct sub-folder path
$subPath = Join-Path $SubFolder.FullName "*\js\*"
# Locate the files at *\js\*
$files = Get-ChildItem $subPath -Recurse
# Filter on Creation date
$files = $files |Where-Object { $_.CreationTime -lt $threshold }
# Remove files
$files |Copy-Item -Destination $NewPath -WhatIf
}
}
3条答案
按热度按时间kh212irz1#
太棒了,你正在进入PowerShell的世界:)
下面是脚本的优化版本。它从$RootFolder递归获取所有超过2天的文件。然后通过替换驱动器号将这些文件复制到新目录。
有时候,cmdlet“Get-Member”会有很大的帮助。每当你手头有对象,你总能做到“|gm”,它是Get-Member的别名。这将向您显示对象类型以及对象具有的所有属性和方法。
你最初的问题是,你试图对一个对象数组进行字符串替换。通过对$SubFolders.FullName执行替换,可以对对象的字符串属性执行替换。
希望有帮助!
享受PowerShell的乐趣!
hrysbysz2#
根据我们的讨论。这是什么应该让你到你需要的地方。
精简版:
未压缩:
kupeojn63#
谢谢大家的帮助。我用下面的方法解决了这个问题: