Powershell ps1 Get Children Copy 命令基本

Powershell ps1 Get Children Copy command basic

我不是程序员。我有一个 Powershell 脚本 .ps1,它进入“db”的所有子文件夹并删除我想删除的所有文件。它适用于我需要的东西。以下代码:

Get-ChildItem "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db\*\dbc\permanent" -Include filmename00.dbc -Recurse | Remove-Item -Verbose

Get-ChildItem "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db\*\dbc\permanent" -Include filename11.dbc -Recurse | Remove-Item -Verbose

Get-ChildItem "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db\*" -Include "filename11.dbc" -Recurse | Remove-Item -Verbose

Get-ChildItem "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db\*\dbc\permanent" -Include filmename22.dbc -Recurse | Remove-Item -Verbose

Get-ChildItem "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db\*\lnc\all" -Include filmename33.lnc -Recurse | Remove-Item -Verbose

Get-ChildItem "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db\*\edt\permanent" -Include filmename44.edt -Recurse | Remove-Item -Verbose

现在我想以通用的方式复制2个文件来模拟上面这段代码,但我不知道该怎么做。

我正在使用此代码复制文件:

Copy-Item -Path "File to copy 1.lnc" -Destination "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db20\lnc\all\" -Recurse

Copy-Item -Path "File to copy 2.lnc" -Destination "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db20\lnc\all\" -Recurse

Copy-Item -Path "File to copy 1.lnc" -Destination "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db30\lnc\all\" -Recurse

Copy-Item -Path "File to copy 2.lnc" -Destination "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db30\lnc\all\" -Recurse

Copy-Item -Path "File to copy 1.lnc" -Destination "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db40\lnc\all\" -Recurse

Copy-Item -Path "File to copy 2.lnc" -Destination "C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db40\lnc\all\" -Recurse

有人可以帮我创建 2 个通用代码(我想每个副本一行)以将“lnc\all”文件夹中的 2 个文件复制到“db”文件夹中存在的任何子文件夹吗?

也就是说,将 6 个代码替换为 2 个通用代码,以防“db”中有其他文件夹也可以。谢谢

我不是程序员,如果可能,请将现成格式的代码发给我(作为示例,谢谢)

对于代码的第一部分,如评论中所述,除了有一个参考(hash table 在这种情况下)以定位目录及其特定文件之外,没有自动的方法来完成它。散列 table 的 keys 是目标路径,values 是使用 -Include 参数定位的文件:

$initialDir = 'C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db'
$targets = @{
    '\*' = 'filename11.dbc'
    '\*\dbc\permanent' = 'filmename00.dbc', 'filename11.dbc', 'filmename22.dbc'
    '\*\lnc\all' = 'filmename33.lnc'
    '\*\edt\permanent' = 'filmename44.edt'
}

foreach($key in $targets.PSBase.Keys) {
    $path = Join-Path $initialDir -ChildPath $key
    Get-ChildItem $path -Include $targets[$key] -Recurse |
        Remove-Item -Verbose
}

对于第二个代码,它可以通过这种方式自动执行,请注意 Copy-Item 中的 -Path 参数可以采用一组路径进行复制,从这个意义上说,因为我们正在复制相同的 2 个文件,您可以将两者的路径存储在一个变量中。然后对于目标路径,似乎应该这样做:

'C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db\*\lnc\all\'

首先获取该路径中的所有目录,然后为每个目录将文件复制到它们:

$filesToCopy = @(
    # Use absolute paths here to be safe
    'File to copy 1.lnc'
    'File to copy 2.lnc'
)
$destination = 'C:\Program Files (x86)\Steam\steamapps\common\Game 2022\data\database\db\*\lnc\all\'

Get-ChildItem $destination -Directory | ForEach-Object {
    Copy-Item $filesToCopy -Destination $_.FullName
}