2009-04-18 5 views
5

J'essaye de construire une fonction qui me montrera tous les chemins où un certain nom de fichier est situé. La fonction prend un paramètre, c'est-à-dire le nom du fichier. Le résultat serait soit une liste de tous les chemins, soit un message indiquant qu'il n'y a pas de fichier de ce type sur le système. Je suis nouveau à Powershell, et je ne reçois pas encore la syntaxe. J'ai essayé ceci:Obtenir PowerShell pour afficher tous les chemins où un certain fichier peut être trouvé sur un lecteur

Get-ChildItem -Path -Include notepad.exe 

Mais qui ont jeté un message d'erreur. Je suis actuellement à essayer:

$i="notepad.exe" 

Foreach ($i in Get-ChildItem c:\ -Recurse){echo -Path} 

maintenant en route, il est toujours en cours d'exécution, ne savent pas ce qui va arriver, vraiment.

EDIT: echo'd une énorme quantité de lignes qui disent juste « -Path » ...

Quelqu'un peut-il aider à ce problème? Je cours Powershell 1.0 en passant.

Alors, pour expliquer ce que je veux voir lors de l'exécution de cette commande, voici un exemple de ce que je pense après avoir cherché * txt:

C:/foo.txt
C:/A/foobar.txt
C:/A1/foo.txt

Et ainsi de suite, listant les chemins à tous. fichiers txt sur mon disque dur. Seuls les chemins, un par ligne, aucune information supplémentaire nécessaire.

EDIT2:

Je l'ai fait. Je vais laisser cette question pour ceux qui font ça dans le futur.

La fonction j'été ce (cet exemple spécifique vous remettra une liste de tous les fichiers .zip sur votre disque dur, modifier si nécessaire):

Get-ChildItem -Path c:\ -Include "*.zip" -Recurse -Force -Name > c:\listOfPaths.txt 

Cela a créé un fichier appelé listOfPaths.txt sur mon C: \ dossier et cela contenait une liste de toutes les occurrences de n'importe quel fichier se terminant par .zip dans tous les sous-dossiers de mon disque dur.

Le bit "c: \" n'est pas mentionné, mais cela ne me dérange pas.

EDIT3:

capar merci pour une version plus complète.

Voici le code de capar (ou comment je l'ai eu à travailler, depuis le Get-enfants ne fonctionne pas 1.0)

Get-ChildItem -Path c:\ -Recurse *.txt | Select-Object -Property FullName 
+2

+1 pour vous ramener à 0, je ne vois rien qui mérite d'un downvote capar –

+0

merci, en essayant toujours de figurer cette commande sur.. – KdgDev

+1

Pourquoi quelqu'un a-t-il violé ce message et l'a-t-il rabaissé? 'Dir * .zip/s> foo.txt' fera à peu près la même chose – ojblass

Répondre

9

Comme c'est vendredi soir, j'ai décidé de jouer avec Power Shell pour voir si je peux aider :) Cela se rapproche de ce que vous demandez, je pense :

Get-ChildItem -Path c:\ -Recurse *.txt | Select-Object -Property FullName 

Si elle aide, cette commande liste les propriétés d'un objet qui sera retourné par Get-ChildItem:

Get-ChildItem | Get-Member 
+1

Powershell e rror: Get-Children n'est pas une cmdlet reconnue, fonction ... Exécutez-vous Powershell 2.0 par hasard? – KdgDev

+2

Utilisé Get-ChildItem et cela a fonctionné comme un charme. Awsome, merci pour l'aide – KdgDev

+1

Bienvenue. Content que ça a marché. –

1

ls c: \ r | ? {$ _. nom -eq "notepad.exe"}

+0

résolu, cochez la réponse si vous le souhaitez – KdgDev

1

Get-enfants ne sont pas reconnus dans Powershell V3 non plus.Ce serait génial si quelqu'un supprimait ce mauvais exemple.

Comme un avertissement à toute personne cherchant des fichiers: C: \ sur les disques durs d'aujourd'hui prendra beaucoup de temps à courir. Il est conseillé de restreindre autant que possible votre recherche. Puisque votre structure de dossier peut inclure des espaces ou des caractères spéciaux, utilisez les délimiteurs de typewriter quote (") ou apostrophe (')

$ mylistoffiles = Obtenir-ChildItem -Path' C: \ Windows \ Setup \ Scripts '-Recurse * .cmd | Select-Object -Property FullName

$ mylistoffiles

Questions connexes