J'exécute la commande suivante dans un répertoire racine d'un référentiel Mercurial. Je veux supprimer tous les fichiers et dossiers commençant par « .hg »:PowerShell remove-item réussit mais génère une exception
gci -rec -filter ".hg*" | remove-item -recurse -force
La chose étrange est que cela fonctionne réellement, mais produit encore l'exception suivante:
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
Parce que l'exception est jeté par Get-ChildItem
, je soupçonne que ma compréhension de la pipelining dans PowerShell est défectueuse. Presque comme Get-ChildItem
trouve un élément, le passe à l'applet de commande suivante dans le pipeline, puis cherche le suivant? Est-ce ainsi que ça fonctionne?
Ce qui suit était censé être un script qui reproduire le problème, mais, sur la même machine, il fonctionne parfaitement:
$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
Même problème ici où cela fonctionne sur une machine, mais je reçois cette erreur sur un autre. – johntrepreneur
Je suppose que cela pourrait être un problème de version powershell s'il y a 2 ensembles de comportements. – johntrepreneur