【问题标题】:Windows batch: parse path/filename, testing for file vs. directory?Windows批处理:解析路径/文件名,测试文件与目录?
【发布时间】:2014-06-04 23:15:23
【问题描述】:

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

@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% 变量为空。

我们将不胜感激地收到任何帮助解决此问题。

【问题讨论】:

  • Pushd 如果目录不存在则返回错误级别 9009,如果存在则返回 1,如果是文件则返回 0。请参阅 pushd /?、popd /? 和 if /? (如果错误级别 0,如果不是错误级别 1)。所以pushd,做你的ifs,然后popd。

标签: windows file batch-file directory


【解决方案1】:

试试这样:

@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

【讨论】:

  • 您不能拥有与任何给定文件夹中的文件同名的目录。文件系统不允许。
  • 这非常有效。谢谢!并且 tony bd 的解决方案也非常有效。谢谢你们。
【解决方案2】:
@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

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 2012-09-29
    • 2014-07-12
    • 2012-09-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2016-01-12
    相关资源
    最近更新 更多