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
}
我不是程序员。我有一个 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
}