我正在尝试创建一个目录结构,如果它在另一个位置不存在。它工作正常,但我在名称中带括号的任何目录上都出错。我想我不得不以某种方式逃脱,但不知道如何。
脚本代码:
$source = "c:\data"
$destination = "c:\scrap\data"
Get-ChildItem -Path $source -Recurse -Force |
Where-Object { $_.psIsContainer } |
ForEach-Object { $_.FullName -replace [regex]::Escape($source), $destination } |
ForEach-Object {
if (!(Test-Path -path $_ )) { $null = New-Item -ItemType Container -Path $_ }
}
答案 0 :(得分:5)
这是一个较短的解决方案:
Copy-Item -Path $source -Destination $destination -Filter {$_.PSIsContainer} -Recurse -Force
答案 1 :(得分:2)
知道了。错误是由方括号引起的。它们用于模式匹配(请参阅here),因此Test-Path
实际检查
C:\ scrap \ data \ Evernote \ backup \ Untitled note 2_files
不存在。您必须使用-LiteralPath
来避免这种情况。