【发布时间】:2013-09-10 23:45:39
【问题描述】:
使用从this、this 和this 收集到的提示,我终于能够启动一系列文件备份脚本。但是,有一件小事我一直无法解决。没有运行时错误,但是当我运行这个脚本时,
$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
我知道这个问题与this question 密切相关(如果不相同),但是在研究它并尝试从那里应用一些智慧之后,使用$_.Name 变量的各种迭代,我意识到我没有没有我想象的那么好理解。我需要有人向我解释如何使用给定的变量构建目标路径和文件名,以及我需要使用哪些替代变量(或代码)来实现我想要的结果。有些东西对我来说没有点击,我需要帮助来理解它。
【问题讨论】:
-
仅供参考,如果以管道符号结束一行,则不需要反引号。 PowerShell 自动将以下行解释为继续管道。但是,我个人发现用管道符号 begin 行更清晰,因此更清楚地看到多行管道中的内容是什么。在这种情况下,您 确实 需要在前一行的末尾添加一个反引号,以转义换行符。所以,我会用反引号结束第 7 行,并将第 8 行更改为:
|foreach {。这不是一种常见的风格,但我认为它使复杂的管道更容易遵循。
标签: variables powershell powershell-2.0 file-copying