Windows批处理:解析路径/文件名,测试文件与目录?

时间:2014-04-20 22:05:13

标签: windows file batch-file directory

感谢此处的其他帖子,我知道如何让批处理文件将删除的文件解析为路径和文件名,如下所示:

@echo off
setlocal EnableDelayedExpansion
FOR %%a IN (%*) DO (
    if exist %%a (
        set DRVPATH="%%~dpa"
        set FILEEXT="%%~nxa"
    )
)
echo DRVPATH: %DRVPATH%
echo FILEEXT: %FILEEXT%

如果我在批处理文件上删除文件,这将非常有效。但是如果我将一个目录放到它上面,那么它会将目录的名称解释为文件名(我的%FILEEXT%变量)。

是否可以让批处理文件测试%FILEEXT%是否实际上是一个目录?如果我删除批处理文件中的目录,我希望%DRVPATH%变量包含完整路径,包括目录名,我希望%FILEEXT%变量为空。

我们将非常感激地帮助您解决这个问题。

2 个答案:

答案 0 :(得分:2)

试试这样:

@echo off
FOR %%a IN (%*) DO (
    if exist %%a\ (
        set DRVPATH="%%~fa"
        set FILEEXT=NIL
    ) else (
        if exist %%a (
            set DRVPATH="%%~pa"
            set FILEEXT="%%~nxa"
        )
    )
)

echo DRVPATH: %DRVPATH%
echo FILEEXT: %FILEEXT%
pause

如果存在具有您放弃名称的目录,则var %FILEEXT%将设置为NIL

答案 1 :(得分:-1)

@Echo off
pushd %1 >nul 2>&1  
If errorlevel 0 if not errorlevel 1 Echo %~nx1 is a folder
If errorlevel 1 Echo %~nx1 is not a folder
Popd