如何在批处理脚本的 IF EXIST 子句中使用变量[重复]

Posted

技术标签:

【中文标题】如何在批处理脚本的 IF EXIST 子句中使用变量[重复]【英文标题】:How to use a variable in an IF EXIST clause in batch scripts [duplicate] 【发布时间】:2022-01-07 15:57:56 【问题描述】:

有没有办法在批处理脚本的 if exists 命令中获取变量的值?

例如

@echo off 
set fi=ab.txt

FOR /L %%i IN (0 1 2) DO (
    set fi=a.txt
    if exist %fi% (
        echo do something
    )
)

【问题讨论】:

一个变量显示为这样%variablename%,而不是这样%%variablename,并且你的For /L循环写错了。请打开命令提示符窗口,输入for /?,然后按[ENTER] 键,然后对set /? 执行相同操作。 代码更正看起来不错,现在应该可以工作了,但是我看不出你的代码有什么意义。您的代码将在不到半秒的时间内执行。以三倍的速度检查文件有什么意义? 是的,之前的代码有效。但是我想在for循环期间更新fi变量,if条件失败 如果是这种情况,您需要启用延迟扩展,(使用SetLocal EnableDelayedExpansion,并像这样扩展您的变量,!variablename! 【参考方案1】:

在您的代码所处的当前状态下,您需要delayedexpansion

但是,您不需要像您一样使用set 创建代码块,因此可以消除delayedexpansion。我说不需要它的原因是因为 set fi=ab.txt 的未知原因,然后 set 将它添加到循环中的其他内容。所以也是这样的:

@echo off 
set fi=ab.txt rem What is the purpose when you re`set` it right after?
set fi=a.txt

For /L %%i IN (0,1,2) DO (
    if exist %fi% (
        echo do something
    )
)

如果您的意图是基于for 循环元变量值设置一个变量,那么您将需要delayedexpansion。这个例子演示了set 中元变量的用法以及从%var% 转换为delayedexpansion!var!

@echo off
setlocal enabledelayedexpansion
set fi=ab.txt

FOR /L %%i IN (0,1,2) DO (
    set "fi=a%%i.txt"
    if exist !fi! (
        echo do something
    )
)

最后的想法,如果它像第一个示例一样,我不确定为什么要在循环中多次检查某些内容,除非您希望文件在几毫秒内到达。

【讨论】:

以上是关于如何在批处理脚本的 IF EXIST 子句中使用变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

BATCH 文件中多个文件名的条件 IF EXIST 语句

如何编写Windows安全检查脚本

批处理 if exist 判断两个文件

在 DOS 6.22 批处理文件中忽略 IF EXIST ELSE 的问题

DOS/BAT批处理if exist else 语句的几种用法

使用标准用户帐户在提升的脚本中获取登录用户名