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
Другие вопросы по тегам