如何在批处理脚本的 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 子句中使用变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 DOS 6.22 批处理文件中忽略 IF EXIST ELSE 的问题