我有一个奇怪的问题。我有一个函数,需要$ srcDir和$ destDir以及$ topDir $ srcDir的格式为\ $ topDir \ subDir1 \ subDir2 \ subDir..n 我需要的是将所有subDir部分附加到$ destDir
到目前为止,我的方法是拆分路径,直到达到$ topDir,然后使用join-path将结果字符串附加到$ destDir。
如果没有子目录附加到$ destPath,那么返回是完美的。
如果我将路径附加到$ destPath,则返回$ destPath $ destPath
以下是样本值中的输出
现在,如果我有子目录
在函数内部,路径看起来是正确的。 destOut值没有dbl。一旦我从函数返回它有双值。
如何防止这种情况?我只是想要一个简单的函数来获取子目录并附加到destDir,这样我就可以保留文件夹结构并将文件移动到相应的目录中。
泰。
function GetSubDir
{
param(
[Parameter(Mandatory=$true)]
[string]$filePath,
[Parameter(Mandatory=$true)]
[string]$destDir,
[string]$topDir="Disk1"
)
$tmpPath = Split-Path $filePath -parent
$fileName = Split-Path $filePath -leaf
$tmp= Split-Path $filePath -leaf
while ($tmp -ne $topDir)
{
if (test-path $tmpPath -PathType container)
{
if ($subDir){$subDir = "$tmp\$subDir"}
else {$subDir = "$tmp\"}
}
else {$subDir = "$tmp"}
$tmp = Split-Path $tmpPath -leaf
$tmpPath = Split-Path $tmpPath -parent
}
$destPath = Join-Path $destDir $subDir
if (!(Test-Path $destPath)) {md $destPath}
if (Test-Path $destPath -PathType container)
#name is set in calling function
{$destPath = Join-Path $destPath $name}
return $destPath
}
答案 0 :(得分:5)
md函数(new-item的别名)返回它创建的目录。由于您不对该值执行任何操作,因此会将其添加到函数的输出流中。
要解决此问题,请执行以下操作之一:
md $destPath | out-null
[null]md $destPath
答案 1 :(得分:1)
请大家知道@TessellatingHecker,请允许我同意一行就足够了,但我相信这一行是必需的:
$srcPath -replace [Regex]::Escape($topDir), $destDir
现在让我们将其封装在一个函数中......
function MapSubDir($srcPath, $topDir, $destDir)
{
$srcPath -replace [Regex]::Escape($topDir), $destDir
}
然后将原始的两个测试用例喂给你,观察你得到了想要的结果:
PS> $srcPath= "C:\path\topdir\"
PS> $topDir= "C:\path\topdir\"
PS> $destDir= "\\server\path\"
PS> MapSubDir $srcPath $topDir $destDir
\\server\path
PS> $srcPath = "C:\path\topdir\subpath\subpath1"
PS> MapSubDir $srcPath $topDir $destDir
\\server\path\subpath\subpath1