for /r %f in (*) do echo %f
Gibt den Ausgabedateinamen zusammen mit dem gesamten Pfad an
\path\to\dir\<filename>
Wie bekomme ich nur das <filename>
ohne den Pfad mit? Ich muss diesen 'Dateinamen'-String verwenden.
Ist es auch möglich, Folgendes zu tun, sobald der Dateiname erfasst wurde?
for /r %%f in (*) do (
echo "blah blah blah 'filename'" >> blahblah_filename.txt
)
for
Befehl.Antworten:
Verwenden Sie
%~nxf
für<filename>.<extension>
.Und ja, Sie können Folgendes tun:
Siehe
for /?
:quelle
find
oderfindstr
Befehl, zum Beispielecho %%f | find "\.git\" > NUL
oderecho %%f | findstr /R /C:"\\\.git\\" /C:"\\\.git\>" > NUL
und dann die Überprüfung der Fehlerebene mit demif
Befehl. (findstr regex ist sehr begrenzt, das ist also mein Versuch, ein führendes\
und [entweder ein abschließendes\
oder ein Ende der Zeichenfolge] durchzusetzen .) Beachten Sie, dassif errorlevel
es Macken mit Durchfall gibt und Sie wahrscheinlich nichtif %errorlevel%
innerhalb einer Schleife arbeiten können. Möglicherweise müssen SieSetLocal EnableDelayedExpansion
zuerst und dannif !errorlevel!
stattdessen.%~nxf
ist der Dateiname, wie ich im ersten Satz sagte. Wenn Sie es in einer Batch - Datei verwenden, müssen Sie die verdoppeln%
, so dass es%%~nxf
. Sie nehmenblah blah blah
nur das Beispiel in der Frage und ersetzen dasfilename
Bit durch die%%~nxf
Ersetzung - dieblah
s sind nur Füllstoffe und haben keine besondere Bedeutung.Ich kann noch keinen Kommentar abgeben, aber ich glaube, das Folgende sollte beachtet werden, um Verwirrung zu vermeiden.
Obwohl
f
dies als FOR-Variablenname verwendet werden kann, ist es am besten, einen anderen Buchstaben zu verwenden, um eine Verwechslung mit dem Formatbuchstaben zu vermeidenf
(der, wie in Bobs Antwort angegeben, den vollständigen Pfadnamen zurückgibt) oder zumindest ein Großbuchstaben zu verwendenF
.quelle