isDir等效于cmd

时间:2014-06-02 17:53:43

标签: powershell cmd

我正在使用tshell连接到设备,我需要检查给定路径是文件还是目录。

我希望使用在设备上运行cmd命令的cmd-device函数,但似乎没有cmd命令来执行此操作。

是否有人可以使用标准cmd函数检查给定路径是指向目录还是​​文件?

2 个答案:

答案 0 :(得分:1)

由于您在问题中标记了PowerShell,因此一个选项是检查Get-Item cmdlet返回的对象类型。

(Get-Item C:\Windows) -is [System.IO.DirectoryInfo]

# Shorter version
(gi C:\Windows) -is [IO.DirectoryInfo]

答案 1 :(得分:0)

文件夹存在的常规测试是

if exist "x:\somewhere\" echo FOLDER FOUND

但是,在某些情况下(我知道novell netware重定向器的情况),当“x:\ somewhere”是文件或文件夹时,前一个条件将始终评估为true

一种替代方案可以是

@echo off
    setlocal enableextensions

    set "target=c:\windows"

    set "what=NOT EXIST"
    for %%a in ("%target%") do for /f "delims=r-" %%b in ("%%~aa%%~za"
    ) do if "%%b"=="d" ( set "what=FOLDER" ) else ( set "what=FILE" )

    echo %what%

    endlocal

检查文件/文件夹属性列表中是否存在初始d

列表中的每个属性都可以是字母(取决于属性)或破折号。

首先是d用于目录,r用于readonly。因此,第二个for使用r-作为分隔符,将可能的d与其他属性分开。

如果文件没有设置任何属性,for命令中的标记生成器将消除所有破折号,不将数据分配给可替换参数,并且不执行do子句中的代码。为避免这种情况,%%~za(元素的大小)将附加到字符串中,因此,如果文件/文件夹存在,将始终存在要处理的数据。如果它不存在,则表达式%%~aa%%~za将被计算为空字符串,并且do子句中的代码将不会执行。