0

我用

dir /b   > test.txt

为了获取我当前目录中所有文件和文件夹的列表。

有没有办法:

  • 如果是文件,则为普通文件名,例如blabla.txt

  • 如果是文件夹,则以“/”结尾,例如myfolder\

?

谢谢。

4

4 回答 4

1

分两步完成可能是最简单的。一个用于附加文件夹的命令\,另一个用于文件的命令。

for /d %F in (*) do @(echo %F\)>test.txt
for %F in (*) do @(echo %F)>>test.txt

如果在批处理文件中使用,则将百分比加倍。

于 2013-05-26T21:36:24.543 回答
1

这如你所问。文件夹末尾有 \,文件没有。

@echo off
for /f "delims=" %%a in ('dir /b') do (
   if exist "%%a\" (
      echo %%a\
   ) else (
      echo %%a
   )
)
pause
于 2013-05-27T09:29:57.263 回答
1
@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

显示了三种方法。

第一个非常慢 - 在包含 1976 个文件和 333 个目录的测试目录上运行大约需要 35 秒。

第二个花了不到一秒钟,但没有正确处理包含的名称!

第三个更复杂,但在大约 6 秒内产生了与第一个相同的结果。

于 2013-05-26T23:34:20.307 回答
0

列出以“txt”结尾的文件

dir /b *.txt > test.txt

仅列出目录:

dir /ad /b
于 2013-05-26T21:06:59.107 回答