0

使用从thisthisthis中收集到的提示,我终于能够获得一系列文件备份脚本。但是,有一件小事我一直无法解决。没有运行时错误,但是当我运行这个脚本时,

$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

原始文件路径被转储到目标目录中,而不仅仅是文件。

我想要的是:

\\Server\Path\_backup\files-from-testData-directory

我得到什么:

\\Server\Path\_backup\_testData\files-from-testData-directory

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

4

1 回答 1

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

Get-ChildItem您可以将结果直接通过管道传输到Copy-File. 但是,目标路径必须以反斜杠结尾,否则该指令会尝试将文件夹替换为$backupPath同名文件,从而导致错误。

于 2013-09-06T20:14:57.750 回答