[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[已解决]批处理中defined在for中运用为何失效?

今天遇到一个很奇怪的现象:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%a in (1.txt) do (
  3. set w=%%a
  4. if defined w (echo !w!) else (echo 无字符)
  5. )
  6. pause
复制代码
这段代码应该是如果1.txt里有字符,就显示,没有则显示无字符。但实际效果为,当1.txt无字符时,没有echo 无字符这个显示。还以为是else失效了。然后我又改成
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%a in (1.txt) do (
  3. set w=%%a
  4. if not defined w (echo 无字符) else (echo !w!)
  5. )
  6. pause
复制代码
也是没有echo 无字符这个显示。那就不与else有关系。

只有把代码改成下面的就可以,好奇怪!我只是举了一个例子,实际是在其他的代码中发现了这个问题。希望大家帮我分析下,是不是哪里错了。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f %%a in (1.txt) do (
  3. set w=%%a
  4. )
  5. if defined w (echo !w!) else (echo 无字符)
  6. pause
复制代码
1

评分人数

    • batman: 感谢给帖子标题标注[已解决]字样PB + 2

2# else

in后面有空格,书写都对了,先是我打错了,改过来了。
1.txt是存在的,测试了好多次。第3个代码则可以显示

TOP

3# batman

哦,明白了,还是基本东西不懂,学习了。
当()为空时,for循环整个都不会执行。以后会注意了。
谢谢了!

TOP

超版主是用来说明If Defined的正确用法罢了,实际上用%%~za是不是为0来判别文本是否为空更准确了
ArdentMan 发表于 2011-7-12 17:18


对,我是在其他用途中遇到的这个问题,拿文本来请教只是简单罢了,主要是If Defined的正确用法,呵呵.

TOP

对于新手确实有点难理解,努力学习.

TOP

返回列表