【问题标题】:batch: check existence of a file with "()" in its path批处理:检查路径中是否存在带有“()”的文件
【发布时间】:2015-12-10 13:37:21
【问题描述】:

在批处理脚本中,我可以检查是否存在这样的文件:

if exist "C:\myfile.txt" (
    :: do some action here
)

我还可以检查存储在变量名中的文件:

set MY_FILE="C:\myfile.txt"
if exist "%MY_FILE%" (
    :: do some action here
)

很遗憾,如果文件名包含括号 (),这将不起作用:

set MY_FILE="C:\Program Files (x86)\myfile.txt"
if exist "%MY_FILE%" (
    :: do some action here
)

Batch 以某种方式将文件路径中的括号解释为 if 语句的块。

如何检查路径中是否存在带有() 的文件?

【问题讨论】:

  • 试试set "MY_FILE=C:\Program Files (x86)\myfile.txt"
  • 您在SET 命令 中的IF 语句中为文件名加上引号。你只需要在一个地方引用它。
  • 似乎我会尝试的第一件事是:IF EXIST "C:\Program Files (x86)\" ECHO EXISTS。效果很好。

标签: batch-file scripting


【解决方案1】:

好的,批处理脚本有时只是令人困惑。不知怎的,我想通了。

首先,我从SET 命令中删除了引号,因为文件路径是通过多次调用SET 组装而成的。感谢您指出这一点。

第二个错误原来是在IF 语句的() 括号内。我在某处使用

回显了文件名的值
echo MY_FILE:%MY_FILE%

这导致路径名中的括号在 if 块中被错误地解释。我不太确定,但我相信这可以与在我的脚本开头启用setlocal enabledelayedexpansion 有关。

把上面的回显线改成

echo MY_FILE:!MY_FILE!

现在一切正常。

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2011-05-19
    • 2015-07-09
    • 1970-01-01
    相关资源
    最近更新 更多