批处理文件使用 if 语句忽略环境变量
Posted
技术标签:
【中文标题】批处理文件使用 if 语句忽略环境变量【英文标题】:Batch File ignores environment variables with if statement 【发布时间】:2017-04-21 11:01:01 【问题描述】:我有以下批处理文件。基本上,它会扫描具有相同名称但扩展名不同 *.TXT 和 .AVI 的文件的导向器。 如果AVI文件名对应的Text文件名存在,则不播放AVI文件。否则它应该由指定的应用程序播放。 似乎环境变量是循环和if之间的问题。 我已经阅读了几乎所有与环境变量有关的批处理文件的相关文章。他们都没有工作。我也尝试过启用和不启用 EnableDelayedExpansion,但没有运气。也试过 == 而不是 EQU 但没有运气。所有 Echo 语句都用于调试。 这是我的尝试。
@echo off
SetLocal EnableDelayedExpansion
SET MyApp="C:\Program Files\VideoLAN\VLC\vlc.exe"
ECHO MyApp is %MyApp%
SET PathToDB=C:\1
ECHO PathToDB is %PathToDB%
FOR %%X in (%PathToDB%\*.avi) DO (
ECHO Q. %%X
SET ABC=YES
IF EXIST "%PathToDB%\%%~nX.txt" (
ECHO Coressponding Text File Exists ....[%%~nX.txt]....
SET ABC=[NO]
)
ECHO 1 %ABC%
ECHO 1 !ABC!
if !ABC! EQU "YES" %MyApp% %%X
if !ABC! EQU "YES" !MyApp! %%X
)
感谢任何有用的建议
【问题讨论】:
你是说问题出在最后一个 if 语句吗?? 尽管变量 ABC 的值为 YES,但代码中的最后两个 if 语句似乎未正确评估 此评论应与已经提供的答案一起阅读。如果您查看您的行,它显示为SET ABC=YES
,如果我将其放在引号中,则显示为SET "ABC=YES "
。现在您应该可以看到您的问题了。
帮助阅读您尝试使用的命令的帮助文件。
【参考方案1】:
您应该仅将EQU
用于数值比较。因为您正在比较文本,所以您应该使用 ==
,但请记住:左侧的整个文本(每个字符)必须与右侧的整个文本相同 ==
运营商。 IF 语句 if !ABC! == "YES" %MyApp% %%X
中的条件永远不会计算为真,因为右侧部分包含双引号 "
而左侧部分不包含。所以应该是:
if "!ABC!" == "YES" %MyApp% %%X
【讨论】:
以上是关于批处理文件使用 if 语句忽略环境变量的主要内容,如果未能解决你的问题,请参考以下文章