我用
dir /b > test.txt
为了获取我当前目录中所有文件和文件夹的列表。
有没有办法:
如果是文件,则为普通文件名,例如
blabla.txt
如果是文件夹,则以“/”结尾,例如
myfolder\
?
谢谢。
我用
dir /b > test.txt
为了获取我当前目录中所有文件和文件夹的列表。
有没有办法:
如果是文件,则为普通文件名,例如blabla.txt
如果是文件夹,则以“/”结尾,例如myfolder\
?
谢谢。
分两步完成可能是最简单的。一个用于附加文件夹的命令\
,另一个用于文件的命令。
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
显示了三种方法。
第一个非常慢 - 在包含 1976 个文件和 333 个目录的测试目录上运行大约需要 35 秒。
第二个花了不到一秒钟,但没有正确处理包含的名称!
第三个更复杂,但在大约 6 秒内产生了与第一个相同的结果。
列出以“txt”结尾的文件
dir /b *.txt > test.txt
仅列出目录:
dir /ad /b