Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Powershell script to locate specific file/file name?

Tags:

powershell

I wanted to write a small script that searched for an exact file name, not a string within a file name.

For instance if I search for 'hosts' using Explorer, I get multiple results by default. With the script I want ONLY the name I specify. I'm assuming that it's possible?

I had only really started the script and it's only for my personal use so it's not important, it's just bugging me. I have several drives so I started with 2 inputs, one to query drive letter and another to specify file name. I can search by extension, file size etc but can't seem to pin the search down to an exact name.

Any help would be appreciated!

EDIT : Thanks to all responses. Just to update. I added one of the answers to my tiny script and it works well. All three responses worked but I could only use one ultimately, no offence to the other two. Cheers. Just to clarify, 'npp' is an alias for Notepad++ to open the file once found.

$drv = read-host "Choose drive" $fname = read-host "File name" $req = dir -Path $drv -r | Where-Object { !$PsIsContainer -and  [System.IO.Path]::GetFileNameWithoutExtension($_.Name) -eq $fname } set-location $req.directory npp $req 
like image 324
gavin19 Avatar asked Aug 06 '10 21:08

gavin19


People also ask

How do I search for a specific file name?

Press the Windows key to access the Windows Start screen. Start typing part of the file name you want to find. As you type, results for your search are shown. See the search tips section for tips on searching for files.

How do I get only the filename in PowerShell?

If you want to get filename without extension in PowerShell, use System. IO. Path GetFileNameWithoutExtension() method.

How do I get a list of filenames in PowerShell?

List the files in a Windows PowerShell directory. Like the Windows command line, Windows PowerShell can use the dir command to list files in the current directory. PowerShell can also use the ls and gci commands to list files in a different format.

What is $_ in PowerShell script?

The “$_” is said to be the pipeline variable in PowerShell. The “$_” variable is an alias to PowerShell's automatic variable named “$PSItem“. It has multiple use cases such as filtering an item or referring to any specific object.


1 Answers

From a powershell prompt, use the gci cmdlet (alias for Get-ChildItem) and -filter option:

gci -recurse -filter "hosts" 

This will return an exact match to filename "hosts".


SteveMustafa points out with current versions of powershell you can use the -File switch to give the following to recursively search for only files named "hosts" (and not directories or other miscellaneous file-system entities):

gci -recurse -filter "hosts" -File  


The commands may print many red error messages like "Access to the path 'C:\Windows\Prefetch' is denied.".

If you want to avoid the error messages then set the -ErrorAction to be silent.

gci -recurse -filter "hosts" -File -ErrorAction SilentlyContinue 


An additional helper is that you can set the root to search from using -Path. The resulting command to search explicitly search from, for example, the root of the C drive would be

gci -Recurse -Filter "hosts" -File -ErrorAction SilentlyContinue -Path "C:\" 
like image 148
Murph Avatar answered Oct 15 '22 01:10

Murph