如何使用 IF EXIST 条件检查目录或文件是否存在?

2024-03-13

如何检查目录或文件是否存在IF EXIST健康)状况?

Such as

If exist "C:/Windows/" OR "C:/Windows2" (
    rem Do something
) else (
    rem Something else
)

我该怎么做?


简单例子1:

@echo off
if not exist "%SystemRoot%\" if not exist "C:\Windows2" goto MissingFolderFile
echo Found either the directory %SystemRoot% or the file/folder C:\Windows2.
rem Insert here more commands to run on either the folder C:\Windows
rem or the file/folder (=any file system entry) C:\Windows2 existing.
goto EndDemo

:MissingFolderFile
echo There is neither the directory %SystemRoot% nor the file/folder C:\Windows2.
rem Insert here more commands to run on neither folder C:\Windows
rem nor file/folder C:\Windows2 existing.

:EndDemo
pause

Windows 命令处理器旨在处理一个接一个的命令行,这就是这个词的含义batch。命令GOTO是在批处理文件中使用的首选命令,以继续批处理,而不是在下一个命令行上,而是在另一个命令行上,具体取决于IF条件,即将处理从一个命令行堆栈(即批处理)更改为另一组命令行。

简单例子2:

@echo off
if exist "%SystemRoot%\" goto FolderExists
if exist "C:\Windows2" goto FS_EntryExists
echo There is neither the directory %SystemRoot%\ nor C:\Windows2.
rem Insert here more commands to run on neither folder C:\Windows
rem nor file/folder/reparse point C:\Windows2 existing.
goto EndDemo

:FS_EntryExists
echo The file system entry (file or folder) C:\Windows2 exists.
rem Insert here more commands to run on C:\Windows2 existing.
goto EndDemo

:FolderExists
echo The folder %SystemRoot% exists.
rem Insert here more commands to run on folder C:\Windows existing.

:EndDemo
pause

要了解所使用的命令及其工作原理,请打开命令提示符 https://www.howtogeek.com/235101/10-ways-to-open-the-command-prompt-in-windows-10/窗口中,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。

  • echo /?
  • goto /?
  • if /?
  • rem /?

NOTE:

Windows 上的目录分隔符是\并不是/就像在 Linux 或 Mac 上一样。 Windows 文件管理通常会自动替换所有/ by \在将不带或带通配符模式的文件/文件夹参数字符串传递到文件系统之前,如 Microsoft 在有关文档中所解释的命名文件、路径和命名空间 https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file。但使用/代替\然而,文件/文件夹参数字符串可能会导致意外行为。

由于使用而导致意外行为的示例/直接在命令提示符窗口中运行以下命令行:

for %I in ("%SystemDrive%/Windows/*.exe") do @if exist "%I" (echo Existing file: "%I") else echo File not found: "%I"

该命令行输出由以下命令找到的可执行文件名列表FOR在不存在命令的 Windows 目录中IF只是因为使用/导致将找到的不带路径的文件名分配给循环变量。因此,仅当系统驱动器上的当前目录恰好是 Windows 目录时,此命令行才有效。

使用相同的命令行\作为目录分隔符:

for %I in ("%SystemDrive%\Windows\*.exe") do @if exist "%I" (echo Existing file: "%I") else echo File not found: "%I"

此命令行将 Windows 目录中可执行文件的每个文件名输出为带有完整路径的现有文件。

另一个例子:

当前驱动器根目录下有一个目录Downloads该驱动器上的当前目录是Temp, 例如D:\Downloads是想要的当前目录并且D:\Temp是当前目录。

使用的命令是:

cd /Downloads

结果是错误信息:

该系统找不到指定的路径。

正确使用目录分隔符的命令:

cd \Downloads

该命令适用于D:\Temp是当前目录并且D:\Downloads现存的。

CD解释不正确/Downloads字符串/D在目录路径的开头作为选项/D还要更改驱动器并搜索该原因ownloads在当前目录中而不是Downloads在当前驱动器的根目录中。这种错误的解释是CD通过使用正确的目录参数字符串可以避免\Downloads.

概括:\是目录分隔符并且/用于命令选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 IF EXIST 条件检查目录或文件是否存在? 的相关文章

  • 启用和禁用延迟扩展,它有什么作用?

    我见过SETLOCAL ENABLEDELAYEDEXPANSION SETLOCAL DISABLEDELAYEDEXPANSION在许多批处理文件中 但命令实际上是做什么的 enabledelayeexpansion指示cmd识别语法
  • 删除“if”语句的大括号是否有任何例外?

    我是一名计算机科学专业的学生 前段时间我们的教授向我们解释说 在 C 语言中 当只有一个语句时 我们可以删除大括号 例如 if a do b 但我们不能这样做 if a do b do c 因为那会做不止一个声明 但它也告诉我们 删除大括号
  • 从详细信息选项卡中获取文件描述

    我希望能够从 dll 或 sys 文件的详细信息选项卡中获取文件描述字符串 我尝试过多种方法来做到这一点 但无法让它们点击 无论如何 是否可以通过命令行执行此操作 使其在屏幕上生成输出 我对使用 VB 提供的 FileVersion des
  • 如果 url 存在 Objective-c

    嘿 我有一个程序需要判断在线图像是否存在 但我让它工作的唯一方法是将图像加载到 NSData 指针中并检查指针是否存在 BOOL exists NSString filePath http couleeapps hostei com Bot
  • 批处理 - 解析 Tracert 的输出

    我想寻求有关 Windows 中 Tracert 输出的一些帮助 即我有以下输出 Tracing route to Y Y Y Y over a maximum of 30 hops 1 1 ms 1 ms 1 ms X X X X 2 1
  • 什么可能导致 PUSHD 失败?

    我有一个很棒的大脚本 完全依赖于 PUSHD 然而当我打字时突然pushd server1 dir1我越来越 C Documents and Settings userNameHere gt pushd server1 dir1 CMD d
  • 在命令行上构建 Windows 8 Phone 应用程序

    我目前正在将现有的跨平台框架移植到 Windows Phone 8 构建过程是完全自动化的 我们使用的是坚如磐石的 CI 系统 我可以从 Visual Studio Express 2012 构建和部署 Windows Phone 8 示例
  • Bash if 语句中何时需要方括号?

    通常 我在 if 语句中使用方括号 if name Bob then 但是 当我检查是否grep成功了我不使用方括号 if grep q text file then 什么时候需要方括号if陈述 方括号是同义词test命令 一个if语句检查
  • 无法以管理员身份运行

    我必须执行ewfmgr exe仅当以管理员身份打开命令窗口时才能执行 如果我去Start gt type cmd exe gt Right click gt Run as Administrator然后出现以下命令提示符窗口 在这个窗口中
  • plpgsql 函数中 IF EXISTS 内部标识符的变量

    CREATE OR REPLACE FUNCTION drop now RETURNS void AS BODY DECLARE row record BEGIN RAISE INFO in FOR row IN select relnam
  • 用于在命令提示符下运行 .exe 的 Bat 文件

    我想创建一个 bat 文件 这样我只需单击它即可运行 svcutil exe language cs out generatedProxy cs config app config http localhost 8000 ServiceMo
  • 如何获取批处理文件中的字符串长度?

    似乎没有一种简单的方法可以获取批处理文件中字符串的长度 例如 SET MY STRING abcdefg SET A MY STRING LEN 我如何找到字符串的长度MY STRING 如果字符串长度函数处理字符串中所有可能的字符 包括转
  • r 中的循环问题: if (length[i] == 1) { 中的错误:缺少 TRUE/FALSE 需要的值

    ann lt 1 2500 len lt sample 1 3 1000 replace TRUE df lt data frame col1 c 1 2500 col2 c 1 2500 for i in 1 length ann if
  • 如果满足条件,如何将值添加到上一行

    我想做的是 如果 b 列中的一行等于 2 那么我想将 3 添加到 a 列中前一行的值 如果不满足条件 那么我不希望更改前一行的值 然而 当我尝试此代码时 R 正在添加到后续行 我用什么替换 1 行引用并不重要 它总是添加到后续行 df a
  • EFCore 3.1 - 通过 Any 存在查询;查询无法翻译

    我们使用 EFCore 3 1 并尝试通过跨越 2 个属性的 Any 使用 Exists 构建查询 var selectionCriteria someHugeList Select sh gt new sh Id sh StatusCod
  • 从MAC地址获取IP。 arp -a 不显示设备

    我正在尝试编写一个批处理文件 该文件应该在连接到网络 腾达 WiFi 路由器 时找到我的 Android 手机的动态分配的 IP 所以我正在尝试arp a并搜索我手机的 MAC 地址 以便我可以从表中获取其 IP C Users Leero
  • 并排启动两个资源管理器窗口

    有没有办法使用批处理脚本并排 垂直平铺 启动两个资源管理器窗口 如果没有 我该如何使用 VBS 来做到这一点 我已经修改了上面的VBS脚本Hackoo完全按照OP的要求去做 脚本中的注释准确地解释了它将做什么 如果两个窗口未设置到正确位置
  • ERRORLEVEL 与 %ERRORLEVEL% 与感叹号 ERRORLEVEL 感叹号

    我想我对 ERRORLEVEL 与 ERRORLEVEL 有基本的了解 但是 ERRORLEVEL 让我困惑 我正在制作一个调用可执行文件的脚本 然后使用任务列表来查看它是否正在运行 然后使用taskkill来杀死它 如果是 然后尝试输出错
  • 如何理解批处理文件?

    我之前没有使用批处理文件或 shell 脚本的经验 我需要了解相关项目中使用的批处理文件所执行的操作 有没有资源提供批处理文件命令的详尽列表以及每个命令的作用 一旦您熟悉了一般的 BAT 文件信息 使用其他用户在其他答案中发布的一些有用信息
  • switch case 与 if else [重复]

    这个问题在这里已经有答案了 我想知道以下代码编译成汇编的方式是否有任何区别 我听说 switch case 比 if else 更有效 但在这个例子中我不太确定情况是否如此 if x 1 else if x 2 else and switc

随机推荐

  • 在 Rails 中添加索引具有多通关系

    考虑到以下关系 class Style lt ActiveRecord Base has many stylefeatures dependent gt destroy has many features through gt stylef
  • 在列表理解中一次添加两个项目[重复]

    这个问题在这里已经有答案了 我想一次将两个项目添加到列表理解中 一项是不变的 如何仅使用列表理解中的一个 for 循环而不使用其他函数来实现这一目标 不使用任何导入的答案将受到青睐 看看以下内容 gt gt gt mystring ABCE
  • 在学说中坚持具有两个外国身份的对象

    我在我的 symfony 包中的 Resources config doctrine 文件夹中使用 yml syntax 创建了一个实体 Sulu Bundle TranslateBundle Entity Translation type
  • 如何使用 Bower 安装最新的不稳定 AngularJS 组件?

    我使用 Yeoman 搭建了一个 AngularJS 应用程序 哟有角度 minsafe 当我运行 bower list 命令时 我得到以下信息 angular 1 0 8 latest is 1 2 0 rc 2 angular mock
  • 为什么我必须为同一依赖项指定“运行时”和“编译”?

    我依赖于编译和运行应用程序所需的一些工件 根据 Gradle 文档 运行时配置extends编译配置 因此肯定使用添加依赖项runtime暗示着一种隐含的compile依赖性 至少这是我的假设 但它不起作用 当仅依赖于使用的工件时runti
  • 如何在bash中退出if语句而不退出程序?

    重写这个问题以避免更多的反对票 因为对我来说删除它已经太晚了 我正在编写一个脚本 要求用户确认之前sourcing一些其他脚本 为了简化代码 假设有两个脚本sourced 但我希望用户可以source没有或仅是其中一个脚本 不是两者都存在
  • 使用 IE9 支持的 jQuery 旋转 div

    我有一些 div 基本上只是图像 当它们旋转 360 度时我会淡入它们 在所有主流浏览器中一切都可以完美运行 但 IE 除外 有效的 CSS3 代码 box width 400px height 400px display inline b
  • Jquery .Submit() 没有触发提交事件

    我有一个很小的问题 我想在下拉列表更改时使用 jQuery 提交我的代码 mydropDown change function myForm submit 但它没有提交 我还在 Firebug 控制台中触发了以下代码 myForm subm
  • 从子视图中的 UIButton 调用 UIViewController 中的方法

    仍在学习 Objective C 并获得正确的结构 我有一个带有 UIViewController 的 iOS 应用程序 它有一个名为 doSomething 的已定义方法 在我的视图控制器中 我有一个视图 并在该视图中以编程方式创建了许多
  • 为什么在使用空引用访问静态时不会出现 NullPointerException? [复制]

    这个问题在这里已经有答案了 在下面的代码中我们得到的值i在空引用上 尽管NPE不在这里 public class Test static int i 10 Test getTest return null public static voi
  • 安装新版本 XCode 15.0 后无法运行应用程序 XCode

    我已经安装了新版本的 Xcode 15 0 此后我无法运行我的 flutter 应用程序 它向我显示以下错误 Error Xcode DT TOOLCHAIN DIR cannot be used to evaluate LIBRARY S
  • 如何矢量化在较大矩阵的子集上运行函数的代码?

    假设我有以下 9 x 5 矩阵 myArray 54 7 8 1 81 7 55 0 22 5 29 6 92 9 79 4 62 2 17 0 74 4 77 5 64 4 58 7 22 7 18 8 48 6 37 8 20 7 43
  • C 中的释放字符串

    如果我写 char a malloc sizeof char 4 a abc char b abc 我是否需要释放该内存 还是由我的系统完成 在您的情况下 您将无法释放动态分配的内存 因为您正在丢失对它的引用 试试这个 include
  • 通过 Android 共享时 Google+ 应用程序显示错误的图片

    我已以编程方式将 Google 共享添加到我的应用程序中 我有一组照片 我将其包含在我的帖子中并使用以下代码共享 private void shareToGooglePlus Launch the Google share dialog w
  • Python-UDP客户端

    我目前正在阅读Pythonbook https www nostarch com blackhatpython并遇到了以下示例 import socket target host 127 0 0 1 target port 80 creat
  • LD_PRELOAD __libc_start_main 的 Makefile

    我想做的事情很简单 当我启动猫鼬服务器时 我想创建一个额外的线程来完成一些额外的工作 为了做到这一点 我想我需要LD PRELOAD the libc start main服务器的 This is spec hooks cpp typede
  • 与邮递员的 CORS

    这个问题已经被问过几次了 但我还是不明白 当我读到有关的答案时 没有 Access Control Allow Origin 标头 问题 它说应该在请求的服务器上设置一个设置以允许跨域 add header Access Control A
  • 适用于 Windows 的 Composer 安装 -

    所以我尝试在我的 Windows 操作系统上安装 Composer 并设置 Laravel 但是当我运行安装时 我不断收到相同的错误 首先 我选择了 php exe 因为它从目录中询问C wamp bin php php5 4 16 我单击
  • JIT 编译的代码驻留在哪里?

    所以我有这个方法 用Java编写 public void myMethod int y int x 5 y doSomething x 并假设我的应用程序多次调用此函数 当在Java虚拟机上运行该方法的编译代码时 JVM将首先解释该方法 然
  • 如何使用 IF EXIST 条件检查目录或文件是否存在?

    如何检查目录或文件是否存在IF EXIST健康 状况 Such as If exist C Windows OR C Windows2 rem Do something else rem Something else 我该怎么做 简单例子1