Comment puis-je parcourir chaque fichier d'un répertoire à l'aide d'une for
boucle?
Et comment savoir si une certaine entrée est un répertoire ou s'il s'agit simplement d'un fichier?
windows
batch-file
for-loop
cmd
Vhaerun
la source
la source
Réponses:
Cela répertorie tous les fichiers (et seulement les fichiers) dans le répertoire actuel:
De plus, si vous exécutez cette commande dans un fichier de commandes, vous devez doubler les signes%.
(merci @agnul)
la source
for /r %i in (*) do ( echo %~nxi )
. Ce fil peut aussi être très utile: stackoverflow.com/questions/112055/… .Itérer à travers ...
for %f in (.\*) do @echo %f
for /D %s in (.\*) do @echo %s
for /R %f in (.\*) do @echo %f
for /R /D %s in (.\*) do @echo %s
Malheureusement, je n'ai trouvé aucun moyen de parcourir les fichiers et les sous-répertoires en même temps.
Utilisez simplement cygwin avec son bash pour plus de fonctionnalités.
En dehors de cela: avez-vous remarqué que l'aide à la compilation de MS Windows est une excellente ressource pour les descriptions de la syntaxe de la ligne de commande de cmd?
Jetez également un œil ici: http://technet.microsoft.com/en-us/library/bb490890.aspx
la source
%file
et%subdir
ne peut contenir qu'un seul caractère, c'est%f
-à- dire%s
.Pour parcourir chaque fichier, une boucle for fonctionnera:
for %%f in (directory\path\*) do ( something_here )
Dans mon cas, je voulais aussi le contenu du fichier, le nom, etc.
Cela a conduit à quelques problèmes et j'ai pensé que mon cas d'utilisation pourrait aider. Voici une boucle qui lit les informations de chaque fichier '.txt' dans un répertoire et vous permet de faire quelque chose avec (setx par exemple).
* Limitation: val <= %% f n'obtiendra que la première ligne du fichier.
la source
Il existe une différence subtile entre l'exécution à
FOR
partir de la ligne de commande et à partir d'un fichier de commandes. Dans un fichier batch, vous devez mettre deux%
caractères devant chaque référence de variable.Depuis une ligne de commande:
A partir d'un fichier batch:
la source
Cette boucle for répertorie tous les fichiers d'un répertoire.
"delims =" est utile pour afficher les noms de fichiers longs avec des espaces dedans ....
'/ b "affiche uniquement les noms, pas les dates de taille, etc.
Quelques choses à savoir sur l'argument dir's / a.
Si vous l'utilisez sur la ligne de commande, supprimez un "%".
J'espère que cela t'aides.
la source
% 1 fait référence au premier argument passé et ne peut pas être utilisé dans un itérateur.
Essaye ça:
la source
Essayez "HELP FOR" en cmd pour un guide complet
Ceci est le guide des commandes XP. http://www.ss64.com/nt/
la source
Pour parcourir tous les fichiers et dossiers que vous pouvez utiliser
Pour parcourir tous les dossiers, mais pas les fichiers, vous pouvez utiliser
Où
/s
donnera tous les résultats dans l'arborescence des répertoires en profondeur illimitée. Vous pouvez ignorer/s
si vous souhaitez parcourir le contenu de ce dossier et non son sous-dossierImplémentation de la recherche dans l'itération
Pour parcourir un fichier et des dossiers nommés particuliers, vous pouvez rechercher le nom et parcourir en utilisant la boucle for
Pour parcourir les dossiers / répertoires nommés particuliers et non les fichiers , utilisez-les
/AD
dans la même commandela source
J'ai eu du mal à faire fonctionner la réponse de jop avec un chemin absolu jusqu'à ce que je trouve cette référence: https://ss64.com/nt/for_r.html
L'exemple suivant parcourt tous les fichiers d'un répertoire donné par le chemin absolu.
la source
Le code suivant crée un fichier nommé "AllFilesInCurrentDirectorylist.txt" dans le répertoire actuel, qui contient la liste de tous les fichiers (fichiers uniquement) dans le répertoire actuel. Vérifiez-le
la source
Il pourrait également utiliser la commande forfiles :
et vérifiez également s'il s'agit d'un répertoire
la source
@isdir==true
doit être@isdir==TRUE
J'utiliserais vbscript (Windows Scripting Host), car en lot, je suis sûr que vous ne pouvez pas dire qu'un nom est un fichier ou un répertoire.
En vbs, cela peut être quelque chose comme ceci:
Vérifiez FileSystemObject sur MSDN .
la source
J'utilise la commande xcopy avec l'option / L pour obtenir les noms de fichiers. Donc, si vous voulez obtenir un répertoire ou tous les fichiers du sous-répertoire, vous pouvez faire quelque chose comme ceci:
J'utilise simplement le c: \ comme destination car il existe toujours sur les systèmes Windows et il ne copie pas, donc cela n'a pas d'importance. si vous voulez aussi les sous-répertoires, utilisez l'option / s à la fin. Vous pouvez également utiliser les autres commutateurs de xcopy si vous en avez besoin pour d'autres raisons.
la source
Essayez ceci pour tester si un fichier est un répertoire:
Cela vous dira seulement si un fichier n'est PAS un répertoire, ce qui sera également vrai si le fichier n'existe pas, alors assurez-vous de vérifier d'abord si vous en avez besoin. Les carets (^) sont utilisés pour échapper aux symboles de redirection et la sortie de la liste de fichiers est redirigée vers NUL pour l'empêcher d'être affichée, tandis que la sortie d'erreur de la liste DIR est redirigée vers la sortie afin que vous puissiez tester le message DIR "Fichier non trouvé" ".
la source
essaye ça:
il compte les fichiers .msi et .exe dans votre répertoire (et dans le sous-répertoire). Cela fait donc la différence entre les dossiers et les fichiers en tant qu'exécutables.
Ajoutez simplement une extension (.pptx .docx ..) si vous avez besoin de filtrer d'autres fichiers dans la boucle
la source
Dans mon cas, j'ai dû supprimer tous les fichiers et dossiers sous un dossier temporaire. C'est ainsi que j'ai fini par le faire. J'ai dû exécuter deux boucles, une pour le fichier et une pour les dossiers. Si les fichiers ou les dossiers ont des espaces dans leurs noms, vous devez utiliser ""
la source
Voici mon go avec des commentaires dans le code.
Je suis juste en train de frôler les compétences de biatch alors pardonnez toutes les erreurs flagrantes.
J'ai essayé d'écrire une solution tout en un du mieux que je pouvais avec une petite modification là où l'utilisateur l'exige.
Quelques notes importantes: Changez simplement la variable
recursive
enFALSE
si vous voulez seulement que les fichiers et dossiers des répertoires racine soient traités. Sinon, il passe par tous les dossiers et fichiers.C&C est le bienvenu ...
la source