Dir /b с "/" в качестве последнего символа в папке
Я использую
dir /b > test.txt
для того, чтобы получить список всех файлов и папок в моем текущем каталоге.
Есть ли способ иметь:
нормальное имя файла, если это файл, пример
blabla.txt
"/" в конце, если это папка, пример
myfolder\
?
Благодарю.
4 ответа
Вероятно, проще всего сделать это в два этапа. Одна команда для папок с добавлением \
и еще одна команда для файлов.
for /d %F in (*) do @(echo %F\)>test.txt
for %F in (*) do @(echo %F)>>test.txt
Удвойте проценты, если они используются в пакетном файле.
Это делает, как вы просите. Папки имеют \ в конце, файлы не имеют.
@echo off
for /f "delims=" %%a in ('dir /b') do (
if exist "%%a\" (
echo %%a\
) else (
echo %%a
)
)
pause
@ECHO OFF
:: method 1
SETLOCAL
ECHO %TIME%
(
FOR /f "delims=" %%i IN ('dir /b') DO (
ECHO %%~ai|FIND "d" >NUL
IF ERRORLEVEL 1 (ECHO(%%i) ELSE (ECHO(%%i\)
)
)>u:\file1.txt
endlocal
ECHO %TIME%
:: method 2
SETLOCAL ENABLEDELAYEDEXPANSION
(
FOR /f "delims=" %%i IN ('dir /b') DO (
SET notdir=%%~ai
if "!notdir:~0,1!"=="d" (ECHO(%%i\) ELSE (ECHO(%%i)
)
)>U:\file2.txt
endlocal
ECHO %TIME%
:: method 3
SETLOCAL
(
FOR /f "delims=" %%i IN ('dir /b') DO (
SET notdir=%%~ai&CALL :isitadir
if DEFINED notdir (ECHO(%%i) ELSE (ECHO(%%i\)
)
)>U:\file3.txt
endlocal
ECHO %TIME%
FC u:\file1.txt u:\file2.txt
FC u:\file1.txt u:\file3.txt
GOTO :eof
:isitadir
IF %notdir:~0,1%==d SET "notdir="
GOTO :eof
Три метода показаны.
Первый довольно медленный - на моем тестовом каталоге потребовалось около 35 секунд с 1976 файлами и 333 каталогами.
Второе заняло меньше секунды, но неправильно обрабатывает имена, содержащие !
Третий более сложный, но дает тот же результат, что и первый, примерно через 6 секунд.
Чтобы вывести список файлов, которые заканчиваются на "txt"
dir /b *.txt > test.txt
Список только каталогов:
dir /ad /b