【问题标题】:How to check if a directory exists with a wildcard in the directory name?如何检查目录名称中是否存在带有通配符的目录?
【发布时间】:2012-08-13 16:39:22
【问题描述】:

我正在尝试创建一个批处理文件,该文件将在处理其余命令之前检查目录是否存在。目录名称将始终以相同的开头,但随后会在末尾附加各种数字,有时还会附加字母。我想删除批处理文件末尾的目录,但是使用带有 rmdir 的变量而不检查以确保首先存在路径会产生问题(如在另一个目录中被删除)。下面的代码是我一直在使用的,但是系统说这条路径不存在。

IF EXIST "C:\Today's Unique Folder*\nul" ( GOTO continue ) ELSE ( GOTO end)

此外,我尝试将此路径设置为变量并将该变量与 IF EXIST 一起使用,但这也不起作用。除了 IF EXIST 之外,我应该尝试其他命令吗?提前感谢您的帮助。

【问题讨论】:

  • 星号 (*) 不是 windows 目录或文件名中的有效字符
  • 我知道这一点。星号的功能是通配符,不是目录名的一部分。

标签: variables if-statement batch-file filenames directory


【解决方案1】:

您可以使用FOR 和/D 参数来使用通配符搜索文件夹名称。

注意,如果找到多个文件夹名称开头部分相同的文件夹,RESULT 将最终成为最后一个文件夹。

SET RESULT=---

FOR /D %%d IN ("C:\Today's Unique Folder*") DO (
  SET RESULT=%%d
)

IF EXIST "%RESULT%" (GOTO WINDIR) ELSE (GOTO NOWINDIR)

:WINDIR
  ECHO Yes
  GOTO END

:NOWINDIR
  ECHO No

:END

【讨论】:

  • 不客气。我很感激您的支持并将我的答案选为“已接受”。
【解决方案2】:

根据MS KBase,您基本上是对的。我认为您的目录名称有问题。以下内容适用于我使用有效的目录名称,它会回显“是”。

尝试在目录名称中不要使用双引号,因为 Windowss 在这种情况下不喜欢它们(stranley)

@echo off

IF EXIST C:\Program Files\NUL ( GOTO WINDIR ) ELSE ( GOTO NOWINDIR )

:WINDIR
echo Yes
goto END

:NOWINDIR
echo No

:END

将“C:\Program Files”更改为不存在的“C:\Foo”之类的东西,它会回显“No”

【讨论】:

  • 是的,这很好,但我正在寻找在目录名称中使用通配符的解决方案。目录名称每天都不同。
猜你喜欢
  • 2011-10-10
  • 1970-01-01
  • 2012-09-12
  • 2012-07-30
  • 2012-03-19
  • 1970-01-01
  • 2021-09-11
  • 2011-02-15
相关资源
最近更新 更多