J'ai une arborescence de dossiers, comme celle-ci (ce n'est qu'un exemple, elle sera plus profonde dans mon cas réel):
C:\test
|
+---folder1
| foo bar.txt
| foobar.txt
|
+---folder2
| foo bar.txt
| foobar.txt
|
\---folder3
foo bar.txt
foobar.txt
Mes fichiers ont un ou plusieurs espaces dans le nom et je dois y exécuter une commande, donc je suis intéressé par foo bar.txt mais pas par foobar.txt.
J'ai essayé (dans un fichier batch):
for /r test %%f in (foo bar.txt) do if exist %%f echo %%f
où la commande est simple echo
.
Cela ne fonctionne pas car l'espace est ignoré et je n'obtiens aucune sortie.
Cela fonctionne mais ce n'est pas ce dont j'ai besoin:
for /r test %%f in (foobar.txt) do if exist %%f echo %%f
Il imprime:
C:\test\folder1\foobar.txt
C:\test\folder2\foobar.txt
C:\test\folder3\foobar.txt
J'ai essayé d'utiliser le guillemet (") mais cela ne fonctionne pas:
for /r test %%f in ("foo bar.txt") do if exist %%f echo %%f
Cela ne fonctionne pas car le guillemet est toujours inclus dans la sortie:
C:\test\folder1\"foo bar.txt"
C:\test\folder2\"foo bar.txt"
C:\test\folder3\"foo bar.txt"
Sans le commutateur récursif, vous pouvez dire de
FOR
ne pas imprimer les guillemets:Vous pourrez peut-être faire des
FOR
instructions imbriquées . L'extérieur parcourrait l'arborescence des répertoires et l'intérieur serait celui ci-dessus.la source
FOR /R %%d in (.) DO for %%f ...
est récursif, mais il y aurait des choses à régler pour le faire fonctionner. Vous devrez peut-être utiliser une expansion retardée, par exemple.SETLOCAL ENABLEDELAYEDEXPANSION
et!varname!
, etc.Vous voudrez peut-être regarder la commande forfiles.
'/ S' - Récursivité. Rechercher dans tous les sous-répertoires
'/ M "* *"' - Masque de fichier. Recherchez uniquement les fichiers avec un espace dans leur nom.
'/ C "cmd / C echo @PATH"' - Commande. Exécutez cette commande sur tous les fichiers trouvés.
Exemple de sortie:
la source
Le drapeau
f
est celui dont vous avez besoin pour obtenir un nom de fichier absolu sans guillemets (afin que vous puissiez mettre des guillemets si vous en avez besoin). Mais comme il entre en conflit avec le nom de variable que vous choisissez, vous devez en utiliser un autre:la source
Merci Dennis! Moi aussi, je travaillais sur un problème presque identique. Je voulais un fichier bat que je pouvais passer dans un paramètre d'entrée comme chaîne de recherche pour les noms de fichiers - récursivement dans les répertoires. Juste au cas où cela serait utile à quelqu'un d'autre ici.
la source