Script Powershell pour trouver un fichier/nom de fichier?
Je voulais écrire un petit script qui a recherché un nom exact du fichier, pas une chaîne de caractères dans un nom de fichier.
Par exemple, si je recherche pour hosts aide de l'Explorateur, je obtenir plusieurs résultats par défaut. Avec le script, je veux juste le nom que je préciser. Je suppose que c'est possible?
Je n'avais vraiment commencé le script et c'est uniquement pour mon usage personnel, donc il n'est pas important, c'est juste m'énerve. J'ai plusieurs disques donc j'ai commencé avec 2 entrées, l'une à la requête de la lettre de lecteur et un autre à spécifier de nom de fichier. Je peux rechercher par extension, la taille du fichier, etc, mais ne semblent pas à la broche de la recherche vers le bas pour le nom exact.
Toute aide serait appréciée!
EDIT : Merci pour toutes les réponses. Juste pour mettre à jour. J'ai ajouté une des réponses à mon petit script et il fonctionne bien. Tous les trois réponses travaillé, mais je pourrais utiliser un seul en fin de compte, n'en déplaise aux deux autres. Des acclamations. Juste pour clarifier, 'npp" est un alias pour Notepad++ pour ouvrir le fichier une fois trouvé.
$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
Vous devez vous connecter pour publier un commentaire.
À partir d'une invite de powershell, utilisez le
gci
applet de commande (alias pourGet-ChildItem
) et-filter
option:Ce sera de retour une correspondance exacte pour le nom de fichier "
hosts
".SteveMustafa points avec les versions actuelles de powershell, vous pouvez utiliser le
-File
commutateur de donner la suite récursive de rechercher seulement les fichiers nommés "hosts
" (et non pas de répertoires ou de divers autres fichiers système entités):Les commandes peuvent imprimer de nombreuses rouge des messages d'erreur comme "
Access to the path 'C:\Windows\Prefetch' is denied.
".Si vous voulez éviter les messages d'erreur puis définissez la
-ErrorAction
à être silencieux.Une assistance supplémentaires est que vous pouvez définir la racine à la recherche de l'aide
-Path
.La commande qui en résulte à la recherche d'une façon explicite la recherche à partir de, par exemple, la racine du lecteur C serait
-Filter
est plus rapide pour cela. Il a dit qu'il est à la recherche pour les fichiers de sorte que vous aurez besoin d'ajouter? { !$PsIsContainer }
.-File
commutateur ne fonctionne que sur les versions plus récentes de PowershellmyBat.bat
-- remarque pas .ps1 cartographie nécessaire), ajouter à vosPATH
, et exécutermyBat.bat toFind
oumyBat.bat *.txt
ou que ce soit ps ou cmd:PowerShell.exe -Command gci -recurse -filter "%1"
En supposant que vous avez un
Z:
lecteur mappé:-match
au lieu de-eq
- Je utiliser ce formulaire pour ce genre de chose:
.
cartes de paramètre de positionPath
et "hôtes" des cartes de paramètre de positionFilter
. Je recommande fortement d'utiliserFilter
surInclude
si le fournisseur prend en charge le filtrage (et le système de fichiers de fournisseur n'). C'est un bon peu plus vite queInclude
.Je suis à l'aide de cette fonction sur la base d' @Murph réponse.
Il recherche à l'intérieur du répertoire et des listes le chemin d'accès complet:
Exemple d'utilisation:
findit myfile
À la recherche de l'ensemble de l'ordinateur:
Dans findFileByFilename.ps1 j'ai:
Cela fonctionne très bien pour moi. Je la comprends.
Je l'ai mis dans un dossier sur mon CHEMIN.
J'invoque avec: