我正在运行一个脚本,其中有多个环境,可以从弹出的窗口中选择。我遇到的唯一问题是当我想要设置脚本以从我创建的源函数复制并立即将它放入多个位置时。
我需要帮助的部分代码发布在下面。
$Source = Select-Boss
$destination = 'D:\parts','D:\labor','D:\time','D:\money'
"Calling Copy-Item with parameters source: '$source', destination: '$destination'."
Copy-Item -Path $source -Destination $destination
以下部分是如何在脚本中设置其余复制功能,以便您更好地了解主要部分的副本。
$Source = Select-Boss
$destination = 'D:\parts'
"Calling Copy-Item with parameters source: '$source', destination: '$destination'."
Copy-Item -Path $source -Destination $destination
但对于一个特定部分,我需要将其复制到多个位置。我需要这样做,因为我不必更改我登录的服务器并转到另一个服务器。这一切都在一个地方完成,我希望能让事情变得更容易,而不是写一大堆小编码去复制并保存在文件夹中。
答案 0 :(得分:7)
copy-item
只为其-destination
参数获取一个值,因此您需要某种类型的循环。
假设您想在多个文件夹中使用相同的文件名:
$destFolders | Foreach-Object { Copy-Item -Path $Source -dest (Join-Path $_ $destFileName) }
应该这样做。
答案 1 :(得分:2)
我认为你想要的是这样的:
$Source = Select-Boss
$destination = @("D:\parts","D:\labor","D:\time","D:\money")
# Calling Copy-Item with parameters source: '$source', destination: '$destination'."
foreach ($dir in $destination)
{
Copy-Item -Path $source -Destination $dir
}
此代码正在创建一个文件夹数组,然后遍历每个文件夹,将文件复制到其中。
答案 2 :(得分:1)
https://www.petri.com/use-powershell-to-copy-files-to-multiple-locations
dir c:\work\*.txt | copy-item -Destination $destA -PassThru | copy -dest $destB -PassThru
答案 3 :(得分:0)
这是我使用过的最好和最简单的解决方案。
就我而言,它是一个网络位置,但它也可以用于本地系统。
"\\foo\foo"
位置按用户名包含10个文件夹。 #
使用双斜杠(它没有在StackOverflow上显示)
dir "\\foo\foo\*" | foreach-object { copy-item -path d:\foo -destination $_ } -verbose
您必须拥有网络共享和目标文件夹的写入权限。
答案 4 :(得分:0)
# Copy one or more files to another directory and subdirectories
$destinationFrom = "W:\_server_folder_files\basic"
$typeOfFiles = "php.ini", "index.html"
$filesToCopy = get-childitem -Path $destinationFrom -Name -include $typeOfFiles -Recurse
$PathTo = "W:\test\"
$destinationPath = Get-ChildItem -path $PathTo -Name -Exclude "*.*" -recurse -force
foreach ($file_item in $filesToCopy)
{
#Remove-Item -Path (Join-Path -Path $PathTo -ChildPath $file_item)
Copy-Item -Path (Join-Path -Path $destinationFrom -ChildPath $file_item) -Destination $PathTo
# Write-Verbose (Join-Path -Path $destinationFrom -ChildPath $file_item) -verbose
ForEach($folder in $destinationPath)
{
#Remove-Item -Path (Join-Path -Path (Join-Path -Path $PathTo -ChildPath $folder) -ChildPath $file_item)
#Copy-Item -Path (Join-Path -Path $destinationFrom -ChildPath $file_item) -Destination (Join-Path -Path $PathTo -ChildPath $folder)
# Write-Verbose (Join-Path -Path $PathTo -ChildPath $folder) -verbose
}
}