我正在构建增量目录结构,由于某种原因,Join-Path
显示了2个DIR。当我以后将其与文件一起发送到复制项目时,它会导致错误,如下所示。我在$to_loc_finalDT1
行的评论中显示了这两个Dirs:
Copy-Item : Cannot find path '\T2DisasterBackupLoc_2019-03-08PrivilegesPrivileges_HH_Bak.csv \T2DisasterBackupLoc_2019-03-08PrivilegesPrivileges_HH_Bak.csv' because it does not exist
所以这是相关的powershell脚本:
$T2 = "\T2DisasterBackupLoc"
$toLocParentDT2 = CreateDatedFolder $parentDirBaseNameDT2
$to_loc_finalDT2 = Join-Path -Path $toLocParentDT2 -ChildPath "Privileges"
#create sub-folder location
if(-Not (Test-Path $to_loc_finalDT2 ))
{
write-output " Creating folder $to_loc_finalDT2 because it does not exist "
New-Item -ItemType directory -Path $to_loc_finalDT2 -force
}
#second dir save files to
$parentDirBaseNameDT1 = "\T1DisasterBackupLoc"
$toLocParentDT1 = CreateDatedFolder $parentDirBaseNameDT1
$to_loc_finalDT1 = Join-Path -Path $toLocParentDT1 -ChildPath "Privileges" #shows 2 dirs here in debugger: \T2DisasterBackupLoc_2019-03-08Privileges \T2DisasterBackupLoc_2019-03-08Privileges
#create sub-folder location
if(-Not (Test-Path $to_loc_finalDT1 ))
{
write-output " Creating folder $to_loc_finalDT1 because it does not exist "
New-Item -ItemType directory -Path $to_loc_finalDT1 -force
}
我不确定如何让Join-Path
尽可能地拥有一个DIR。现在,我认为它被视为一个数组,这是不正确的。
我尝试搜索相关问题,但没有看到类似的问题。
更新
这是创建的Folder的代码:
#create dated folder to put backup files in
function CreateDatedFolder([string]$name){
$datedDir = ""
$datedDir = "$name" + "_" + "$((Get-Date).ToString('yyyy-MM-dd'))"
New-Item -ItemType Directory -Path $datedDir -force
return $datedDir
}
返回后的输出看起来不错。它将日期附加到 t2 distrivebackup loc上,但是调试器仅在那里显示一个dir,而不是一个单独的字符串的数组或2个dir。
作为t-me在发布 CreateDatedFolder
源之前正确地推断出来,问题是函数无意间输出 2 对象,并且 Join-Path
接受每个与儿童路径连接的父路径的 array 。
具体来说,在您的return $datedDir
调用之前,意外创建了附加输出对象的New-Item
调用。
为防止这种情况,抑制输出: 在此答案中讨论了抑制输出的其他方法,该答案还讨论了PowerShell隐式输出行为的 Design Arigation 。 请注意,您永远不需要 是句法糖: 有关PowerShell的隐式输出行为的更多信息,请参阅此答案。New-Item
输出一个[System.IO.DirectoryInfo]
实例代表新创建的目录,并且由于 PowerShell的 n> intimit 输出行为,该实例成为函数输出的一部分。/em> - 在脚本/函数中返回未捕获或重定向的值的任何命令或表达$null = New-Item -ItemType Directory -Path $datedDir -force
return
在powershell中以 output a结果 - 但是您可能需要它来 flow Control,过早退出功能:return $datedDir
$datedDir # Implicitly output the value of $datedDir.
# While you could also use `Write-Output $datedDir`,
# that is rarely needed and actually slows things down.
return # return from the function - flow control only