不知道我在这个简单的批处理文件中缺少什么。我在下面提到的目录中有文件夹和文件。它永远不会达到Exist语句,因为下面的语句只列出了文件。有没有办法处理文件和目录
还有其他更好的选择来查找当前元素是文件还是目录
请在windows批处理编程中看到我作为新手
@echo off
setlocal enabledelayedexpansion
FOR %%b IN (D:\Client1\testbat\*) DO (
IF exist %%b\* (
echo %%b --- Directory
) else (
echo %%b --- file
)
)
PAUSE
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
SET "targetdir=u:\sourcedir"
FOR /f "delims=" %%b IN ('dir /b "%targetdir%"') DO (
IF exist "%targetdir%\%%b\*" (
echo %%b --- Directory
) else (
echo %%b --- file
)
)
GOTO :EOF
这可以解决您的问题 - 您需要更改targetdir
的设置以适应您的具体情况。
您的代码存在的问题是,您的for
的目标是文件,而不是所有目录条目。
修改后的代码读取dir /b
列表(目录 - 基本(仅限名称))。如果遇到名称中的分隔符(如空格),则需要delims
;引号以确保找到的名称被处理为一个字符串,无论是否存在空格,%targetstring%\
前缀确保taret目录,而不是当前目录被引用。
设置targetdir
可确保只需编辑一次即可更改目标目录名称。
答案 1 :(得分:0)
列出文件和文件夹:
FOR /f "delims=" %%b IN ('dir /b *') DO (
更多信息:
仅列出目录:
FOR /f "delims=" %%b IN ('dir /b /ad *') DO (
仅列出文件:
FOR /f "delims=" %%b IN ('dir /b /a-d *') DO (
答案 2 :(得分:0)
简单的FOR循环仅列出文件。
带有/ D选项的简单FOR循环仅列出目录。
如果要同时列出两者,则必须使用FOR / F处理DIR / B命令的输出。
for /F "eol=: delims=" %%F in ('dir /b /s "D:\Client1\testbat\*"') do (
if exist "%%F\" (
echo Directory: %%F
) else (
echo File: %%F
)
)
或者您可以使用FORFILES
forfiles /p "D:\Client1\testbat" /m "*" /c "cmd /c if @isdir==TRUE (echo Directory: @path) else echo File: @path"
我倾向于避免使用FORFILES,因为它相对较慢。