2010-06-23 4 views

Répondre

0

Voulez-vous dire la construction suivante dans l'interpréteur de commandes (cmd.exe):

for %f IN (*.*) DO echo %f 
+0

Je veux appeler myprog avec chaque fichier dans le répertoire courant comme argument. – akula1001

3

Si votre objectif est d'appeler « monprog.exe » pour chaque fichier dans un répertoire, en supposant que « monprog.exe "ne gère pas wildcards par itselef, il devrait être quelque chose comme ça dans Powershell:

dir | % {prog $_.FullName} 

Edit: prendre votre commentaire en compte, essayez ceci:

prog (get-childItem -name) 

Espérons que ça aide ...

+0

Je veux exécuter une seule instance de myprog avec plusieurs arguments, chaque argument correspondant à un fichier dans le répertoire courant. par exemple: dans unix 'myprog *' s'étendrait à 'myprog a.txt g.txt p.txt' ..etc – akula1001

2

J'ai enveloppé la solution de Cédric Rup dans une fonction ea (ExpandAll?). Pas aussi propre que l'approche Unix.

function ea ($p="*") { dir $p | foreach { '"{0}" ' -f $_.Name } } 

.\Myprog.exe (ea) 
.\Myprog.exe (ea *) 
.\Myprog.exe (ea *.txt) 
+1

En fait, il n'y a pas besoin de protection contre l'espace dans les noms de fichiers ... donc un simple childItem -name fait l'affaire –

1

Dans un fichier .CMD ou .BAT:

SETLOCAL EnableDelayedExpansion 
FOR %%f in (*) DO SET params=!params! "%%f" 
CALL myprog %params% 

Le SETLOCAL EnableDelayedExpansion et !variable! syntaxe vous permettent d'accumuler les résultats. (Voir this page pour des explications et des exemples.)

Modifier: Ajout de guillemets autour de %% f, et changé la liste pour être '*' ... voir les commentaires ci-dessous.

+0

+1 mais vous devriez envelopper '! params!' entre guillemets pour protéger des espaces dans les noms de fichiers –

+0

@Frank: Pas du tout. Vous devriez mettre '%% f' entre guillemets. Une liste de fichiers de "" "" "1.txt" 2.txt "3.txt" 4.txt "5.txt" serait un peu étrange. ewall: Il suffit d'utiliser '*' comme caractère générique. – Joey

+0

@Johannes Je suis parti dans le *. * Comme un moyen simple d'éviter la liste des sous-répertoires ... mais j'aurais dû mentionner l'hypothèse que les noms de fichiers ont. les extensions et les sous-dossiers ne le font pas. Merci! – ewall

Questions connexes