【问题标题】:How to use a variable in an IF EXIST clause in batch scripts [duplicate]如何在批处理脚本的 IF EXIST 子句中使用变量[重复]
【发布时间】: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!

标签: batch-file batch-processing


【解决方案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
    )
)

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

【讨论】:

    猜你喜欢
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2012-05-11
    • 2019-05-08
    • 2022-06-30
    • 2020-02-13
    相关资源
    最近更新 更多