【问题标题】:Batch - Checking if directory doesn't exist doesn't work批处理 - 检查目录是否不存在不起作用
【发布时间】:2018-10-28 22:56:12
【问题描述】:

我有以下批处理脚本:

@ECHO OFF
SETLOCAL ENABLEEXTENSIONS

SET directoryContainsFiles=%~f1

ECHO %directoryContainsFiles%

IF NOT EXIST directoryContainsFiles (
    ECHO "ERROR: 1. Argument -> Directory which should contain source files not found!"
    EXIT /B 1
)

当我运行命令
rename_media_files.cmd "G:\Projects\Rename Batch Script\testfolder\source"
(在 cmd.exe - Windows 10 64 位上)使用绝对存在的目录时,directoryContainsFiles 会正确地得到 echod(G:\Projects\Rename Batch Script\testfolder\source)但是IF NOT EXIST 子句不起作用,因为我总是在里面得到错误消息:ERROR: 1. Argument ...

我还尝试在目录路径中以反斜杠结尾调用脚本:
rename_media_files.cmd "G:\Projects\Rename Batch Script\testfolder\source\"

我还尝试(带和不带反斜杠结尾)检查 nul 文件:
IF NOT EXIST directoryContainsFiles/nul

怎么了?

感谢您的帮助。

【问题讨论】:

  • 由于目录名包含一个分隔符(空格),您需要“引用名称”并且因为directoryContainsFiles 是一个变量的名称,那么您需要@ 987654331@ 或者最好是IF NOT EXIST "%directoryContainsFiles%\." (,其中%varname% 传递变量的内容。我展示的第二种形式检测目录。第一个检测文件或目录。您的代码试图检测一个名为 directoryContainsFiles 的目录(或文件) - 我假设 not 存在。
  • @Magoo,if not exist "%directoryContainsFiles%\." 中的尾随点必须删除才能检查现有目录...
  • @aschipfl : 哦 - 很好看!你是对的!

标签: batch-file scripting


【解决方案1】:

试试这个修改:

@ECHO OFF
SETLOCAL ENABLEEXTENSIONS

SET "directoryContainsFiles=%~f1"

ECHO=%directoryContainsFiles%

IF NOT EXIST "%directoryContainsFiles%\" (
    ECHO "ERROR: 1. Argument -> Directory which should contain source files not found!"
    EXIT /B 1
)

但是我认为没有理由首先 SET 一个变量:

@ECHO OFF
ECHO=%~f1
IF NOT EXIST "%~f1\" (
    ECHO "ERROR: 1. Argument -> Directory which should contain source files not found!"
    EXIT /B 1
)

【讨论】:

    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多