for /r %f in (*) do echo %f
Donne le nom du fichier de sortie ainsi que le chemin complet
\path\to\dir\<filename>
Comment obtenir juste le <filename>
sans le chemin d'accès inclus? J'ai besoin d'utiliser cette chaîne de "nom de fichier".
Est-il également possible de procéder comme suit, une fois le nom de fichier acquis?
for /r %%f in (*) do (
echo "blah blah blah 'filename'" >> blahblah_filename.txt
)
for
commande.Réponses:
Utiliser
%~nxf
pour<filename>.<extension>
.Et oui, vous pouvez faire:
Voir
for /?
:la source
find
oufindstr
, par exempleecho %%f | find "\.git\" > NUL
ouecho %%f | findstr /R /C:"\\\.git\\" /C:"\\\.git\>" > NUL
, puis en vérifiant le niveau d'erreur avec laif
commande. (regex findstr est très limité, c'est donc ma tentative d'imposer un début\
et [soit une fin\
ou une fin de chaîne]). Notez que celaif errorlevel
a des caprices avec fall-through, et vous ne pouvez probablement pasif %errorlevel%
dans une boucle, vous devrez peut-être d'SetLocal EnableDelayedExpansion
abord et ensuite à laif !errorlevel!
place.%~nxf
est le nom du fichier, comme je l'ai dit dans la première phrase. Lorsque vous l'utilisez dans un fichier de commandes, vous devez doubler le%
, ce qui en fait%%~nxf
. Leblah blah blah
prend simplement l'exemple dans la question et remplace lefilename
bit par la%%~nxf
substitution - lesblah
s ne sont que du remplissage et n'ont pas de signification particulière.Je ne suis pas encore en mesure de commenter, mais je pense que les points suivants doivent être notés pour éviter toute confusion.
Bien qu'il
f
puisse être utilisé comme nom de variable FOR, il est préférable d'utiliser une autre lettre pour éviter de la confondre avec la lettre de formatf
(qui, comme indiqué dans la réponse de Bob, renvoie le nom de chemin complet), ou au moins utiliser une majusculeF
.la source