Я запускаю следующую команду в каталоге, который является корнем хранилища Mercurial. Я хочу удалить любые файлы и папки, начинающиеся с ".hg":
gci -rec -filter ".hg*" | remove-item -recurse -force
Странно то, что он действительно работает, но все равно выдает следующее исключение:
Get-ChildItem : Could not find a part of the path 'C:\temp\WSCopyTest\MyCompany.Services.DaftPunk\.hg\'.
At line:1 char:4
+ gci <<<< -rec -filter ".hg*" | remove-item -recurse -force
+ CategoryInfo : ReadError: (C:\temp\WSCopyT...es.DaftPunk\.hg:String) [Get-ChildItem], DirectoryNotFoundException
+ FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand
Поскольку исключение выдается Get-ChildItem
, я подозреваю, что мое понимание конвейеризации в PowerShell неверно. Почти как Get-ChildItem
находит элемент, передает его следующему командлету в конвейере, а затем ищет следующий? Это так работает?
Предполагалось, что следующий сценарий будет воспроизводить проблему, но на той же машине он работает безупречно:
$repoRoot = "C:\Temp\HgDeleteTest\MyRepo"
remove-item $repoRoot -recurse -force
md $repoRoot
pushd $repoRoot
hg.exe init
add-content ShouldBeLeftBehind.txt "This is some text in a file that should be left behind once the various .hg files/directories are removed."
add-content .hgignore syntax:glob
add-content .hgignore *.dll
add-content .hgignore *.exe
hg.exe commit --addremove --message "Building test repository with one commit."
gci -rec -filter ".hg*" | remove-item -recurse -force
popd