Par exemple, au lieu d'obtenir uniquement des fichiers .MID, je reçois aussi un fichier .Midi et je veux éviter ceci: p>
Si possible, je voudrais éviter d'utiliser une condition si dans la déclaration DO.
Je dois utiliser cette boucle simple car elle ne vélore pas dans les sous-dossiers et c'est le comportement que je veux. P>
3 Réponses :
Malheureusement, la plupart des commandes traitent Vous pouvez donc modifier cette première ligne à la ligne-ligne sur: p> ou: p> vous pouviez Utilisez également une commande qui traite l'extension correctement, d'un fichier de lots vous doubleriez le *. ext code> comme toute poste commençant par
.ext code> de sorte que vous l'avez vu, qui inclurait,
extn < / Code> aussi:
où.exe code> strud>: p>
% code> strong> caractères. em> p> p>
Pour / f "delims ="% i in ("où * .mid ') do @echo% ~ nxi
Pour / f "jetons = *"% i in ('where * .mid') @echo% ~ nxi
Ce n'est pas la même chose, si vous n'utilisez pas . Code> b> comme le répertoire actuel, il recherchera ailleurs, (dans les répertoires répertoriés sous
% path % code>) i>. Il arrive tellement que vous n'avez actuellement aucun fichier
.mid code> de fichiers, ne constatez pas la différence i>.
"Ouvrez une fenêtre d'invite de commande, CD sur"% UserProfile% \ Desktop ", puis entrez, CD.> Test DLL, (cela créera un fichier test.dll vide sur votre bureau). Entrez maintenant où.: *. DLL, et notez la sortie, faites maintenant la même chose mais en utilisant où * .dll. Le seul moyen que vous auriez une sortie correspondante serait si, vous n'avez pas eu les entrées par défaut dans votre% de path%. " Wtf! : -O tu as raison! Comportement étrange.
Pourquoi est-il nécessaire de spécifier l'option EOL?
Après une journée complète de tests, j'ai finalement découvert que la solution dans votre réponse est la meilleure: pour / felims ^ = ^ eol ^ =% A In ('Où.: *. Mid 2 ^> Nul') do @echo% ~ nxa
Dans ce cas particulier, il ne devrait pas être nécessaire de stipuler un eol code>, c'est plus une habitude. Généralement, un
pour code> boucle, utilise une erreur par défaut
eol code> d'un point-virgule,
; code> b>, cela signifie que toute chaîne retournée en commençant par une est exclu de la sortie.
où code> sortira les chaînes résultantes en tant que chemins de fichiers complets, ce qui signifie que tout devrait commencer par une lettre,
a code> -
z code>. Donc, vous pouvez simplement utiliser
"delims =" code> à la place. Vous pouvez essayer
"jetons = *" code>, et il doit fonctionner aussi bien dans ce cas, car toutes les chaînes ne finiront pas non plus avec un espace ou une onglet, (ils finiront tous
.mid code>) i>.
for /f %i in ( ' dir /b *.mid^|findstr /e /i /L /c:".mid" ' ) do @echo %i not simple, but avoids the if statement. A simple dir filtered by findstr to find lines that /e end with /i case-insensitive, /L literal /c: constant string."doesn't even" implies that you actually want to scan subdirectories. To do that, add the /s switch to the dir command. Also might be advisable to add /on to the dir command to cater for FAT filesystems.
Je dois utiliser cette simple boucle car elle ne fait pas de vélo dans les sous-dossiers et c'est le comportement que je veux.
Voici la solution: pour plus de fichiers: p> ou (syntaxe équivalente) p> FOR /F "delims= eol=" %i IN ('WHERE "%Path1%:*.exe" "%Path2%:*.dll" 2^> NUL') DO @ECHO %~nxi
Vous n'avez pas demandé une fonction récursive dans votre question, il n'était donc pas nécessaire de l'inclure dans votre réponse, surtout compte tenu de votre commentaire ci-dessous la réponse de Magoo i>. De plus, comme je l'ai commenté en réponse à votre réponse sous ma réponse, ignorez le . Code> b>, car le répertoire actuel n'est pas sage, Essayez-le avec un seul
.dll code> fichier dans votre répertoire actuel, si vous ne me croyez pas i>. Ajout essentiellement votre réponse, n'a bénéficié personne et pris l'accent sur ma réponse déjà acceptée.
Dans "C: \ Windows", j'ai essayé avec un fichier dans le sous-dossier "System32" et n'a pas été trouvé: où ACPROXY.DLL. Au lieu de cela a été trouvé avec: où / r. acproxy.dll. J'utilise Windows 7.
En tout état de cause, votre conseil à utiliser le programme Où.exe est brillant et rend le code beaucoup plus simplifié. Merci beaucoup.
Ouvrez une fenêtre d'invite de commande, CD CODE> TO
"% UserProfile% \ Desktop" CODE> puis entrez,
CD.> Test DLL CODE> ( Ceci créera un fichier vide
test.dll code> sur votre bureau) i>. Entrez maintenant
où.: *. DLL code> et notez la sortie, faites maintenant la même chose, mais utilisez
où * .dll code>. La seule façon dont vous auriez une sortie correspondante serait si, vous n'avez pas eu les entrées par défaut de votre
% de path% code>.
TBF, si vous lisez la sortie de l'aide de la commande, où /? Code>, si ma mémoire sert i>, il devrait stipuler ce comportement, (actuel répertoire et ceux-ci Chemin) I>, comme il s'agit d'emplacements de recherche par défaut. Stipulation évidemment un répertoire signifie que la valeur par défaut n'est plus utilisée.
"TBF, si vous lisez la sortie de l'aide de la commande, où /?, Si ma mémoire sert, il devrait stipuler ce comportement (répertoire actuel et celles-ci dans le chemin), car il s'agit d'emplacements de recherche par défaut. Stinpant évidemment un répertoire, signifie que cela signifie que La valeur par défaut n'est plus utilisée. ". J'ai lu l'aide, tu as raison! Merci pour tout!
MIDI CODE> Les fichiers ont un nom abrégé de
.mid code>. Donc, ils correspondront à une fauve de fichier de
*. Mid code>. Il suffit d'ajouter un chèque
pour% i in (* .mid) do @IF non% ~ xi = .Midi echo% i code>.
Veuillez afficher votre ligne de commande ainsi que votre texte de texte sous forme de texte plutôt que comme une image de Modifier intim de votre message!