I am testing a Power Shell script to clean out a folder and I noticed some unexpected (to me) behavior when i used the - recurse flag
I have read the help files and done some searching but cant find an explanation for what is happening here.
Consider these 3 Power Shell commands:
Get-ChildItem -Path C:\folderThatDoesNotExist -recurse
Get-ChildItem -Path C:\folderThatDoesNotExist\ -recurse
Get-ChildItem -Path C:\folderThatDoesNotExist\* -recurse
The first command appears to search all of C:\ and there are a bunch of access denied errors for folders outside C:\folderThatDoesNotExist (eg c:\windows)
The second errors out with c:\f does not exist
The third errors out with c:\folderThatDoesNotExist\ not found
I expected all 3 to give an error of c:\folderThatDoesNotExist\ Path not found. Why do the first 2 give different errors?
1st command: Get-ChildItem -Path C:\folderThatDoesNotExist -recurse
You're seeing an unfortunate nod to cmd.exe
's dir
command, where the last path component of the -Path
argument is interpreted as a pattern to be searched for on all levels of the subtree hierarchy - even when that last component doesn't contain wildcard characters such as *
and ?
.
This highly problematic behavior is discussed in GitHub issue #5699.
To avoid it, use -LiteralPath
instead of -Path
.
Caveat: user3608068 reports that this doesn't help in PowerShell v4 (and possibly all lower versions).
2nd command: Get-ChildItem -Path C:\folderThatDoesNotExist\ -recurse
The behavior is more sensible - an error occurs - but the error message complains about only part of the path, C:\f
.
This is in itself a bug, but a harmless one (if you omit -Recurse
, the error message quotes the correct, full path).
3rd command: Get-ChildItem -Path C:\folderThatDoesNotExist\* -recurse
This command exhibits the expected behavior: C:\folderThatDoesNotExist
is correctly interpreted as a directory path that doesn't exist (whose child elements are being requested with wildcard *
), and the error message correctly reflects that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With