为什么此PowerShell脚本构建意外的文件路径?

dww*_*n66 0 variables powershell powershell-2.0 file-copying

利用收集到的技巧这个,这个这个,我终于能够得到一系列的文件备份的脚本去的.但是,有一件事我无法解决.没有运行时错误,但是当我运行此脚本时,

$originalPath = "\\Server\Path\_testData\"
$backupPath   = "\\Server\Path\_backup\"
#       
function supportBackup 
{
  "$($originalPath) copying DOC XLS PPT JPG GIF PDF WAV AVI to $($backupPath)"
  Get-ChildItem $originalPath\* -Include *.doc*, *.xls*, *.ppt*, *.jpg, *.gif, *.pdf, *.wav, *.avi | `
  foreach { 
    $targetFile = $backupPath + $_.FullName.SubString($originalPath.Length); 
    New-Item -ItemType File -Path $targetFile -Force;  
    Copy-Item $_.FullName -destination $targetFile 
  } 
  "Support File Backup Completed"
} 
supportBackup
Run Code Online (Sandbox Code Playgroud)

原来的文件路径被倾倒到目标目录,而不是仅仅的文件.

我想要的是:

\\Server\Path\_backup\files-from-testData-directory
Run Code Online (Sandbox Code Playgroud)

我得到了什么:

\\Server\Path\_backup\_testData\files-from-testData-directory
Run Code Online (Sandbox Code Playgroud)

我知道这个问题是密切相关的(如果不相同)这个问题,但研究它,并尝试应用一些从那里的智慧,使用的各种迭代后$_.Name的变量,我意识到我没有那么好理解的我以为我做到了.我需要有人向我解释如何使用给定的变量构建目标路径和文件名,以及我需要使用哪些替代变量(或代码)来实现我想要的结果.有一些东西没有点击我,我需要帮助理解它.

Ans*_*ers 5

你太努力了.这应该足够了:

$originalPath = '\\Server\Path\_testData'
$backupPath   = '\\Server\Path\_backup'
$extensions   = *.doc*,*.xls*,*.ppt*,*.jpg,*.gif,*.pdf,*.wav,*.avi

function supportBackup {
  "$($originalPath) copying DOC XLS PPT JPG GIF PDF WAV AVI to $($backupPath)"
  Get-ChildItem "$originalPath\*" -Include $extensions |
    Copy-Item -Destination "$backupPath\" -Force 
  "Support File Backup Completed"
} 

supportBackup
Run Code Online (Sandbox Code Playgroud)

您可以将结果Get-ChildItem直接传递给Copy-File.但是,目标路径必须以反斜杠结尾,否则指令将尝试$backupPath使用相同名称的文件替换该文件夹,从而导致错误.