如果是批处理文件或目录

时间:2014-10-24 15:03:05

标签: batch-file cmd batch-processing

不知道我在这个简单的批处理文件中缺少什么。我在下面提到的目录中有文件夹和文件。它永远不会达到Exist语句,因为下面的语句只列出了文件。有没有办法处理文件和目录

还有其他更好的选择来查找当前元素是文件还是目录

请在windows批处理编程中看到我作为新手

@echo off

setlocal enabledelayedexpansion
FOR %%b IN (D:\Client1\testbat\*) DO (
    IF   exist %%b\* (
       echo %%b --- Directory
    ) else (
       echo %%b --- file
    )
)
PAUSE

3 个答案:

答案 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,因为它相对较慢。