for /r %f in (*) do echo %f
Podaje wyjściową nazwę pliku wraz z całą ścieżką
\path\to\dir\<filename>
Jak mogę uzyskać dostęp <filename>
bez uwzględnienia ścieżki? Muszę użyć tego ciągu „nazwa pliku”.
Czy można również wykonać następujące czynności po uzyskaniu nazwy pliku?
for /r %%f in (*) do (
echo "blah blah blah 'filename'" >> blahblah_filename.txt
)
windows
command-line
script
batch
Sójka
źródło
źródło
for
polecenia.Odpowiedzi:
Użyj
%~nxf
dla<filename>.<extension>
.I tak, możesz zrobić:
Zobacz
for /?
:źródło
find
lubfindstr
, np.echo %%f | find "\.git\" > NUL
Lub,echo %%f | findstr /R /C:"\\\.git\\" /C:"\\\.git\>" > NUL
a następnie sprawdzając poziom błędu za pomocąif
polecenia. (findstr regex jest bardzo ograniczony, więc to moja próba wymuszenia wiodącego\
i [\
końca lub końca łańcucha]). Zauważ, żeif errorlevel
ma dziwactwa z upadkiem i prawdopodobnie nie możesz znaleźć sięif %errorlevel%
w pętli, więc być może będziesz musiałSetLocal EnableDelayedExpansion
najpierw, a potemif !errorlevel!
zamiast tego.%~nxf
to nazwa pliku, jak powiedziałem w pierwszym zdaniu. Kiedy używasz go w pliku wsadowym, musisz go podwoić%
, czyniąc go%%~nxf
.blah blah blah
Jest to na przykładzie w pytaniu i zastępowaniafilename
świdra z%%~nxf
podstawienia - gdyblah
S są tylko wypełniacz i nie mają szczególnego znaczenia.Nie jestem jeszcze w stanie komentować, ale uważam, że należy przestrzegać poniższych wskazówek, aby uniknąć nieporozumień.
Chociaż
f
można go użyć jako nazwy zmiennej FOR, najlepiej użyć innej litery, aby uniknąć pomylenia jej z literą formatuf
(która, jak stwierdzono w odpowiedzi Boba, zwraca pełną nazwę ścieżki), lub przynajmniej użyj dużej literyF
.źródło