找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 60597|回复: 15

[文件操作] [已解决] 批处理内嵌if出现语法错误

[复制链接]
发表于 2013-7-1 12:31:43 | 显示全部楼层 |阅读模式
本帖最后由 pZjVa0 于 2013-7-1 22:25 编辑

每次遇到这种内嵌的if语句总会遇到各种语法错误,查了一下后发现转义符^可以解决这个问题,下面代码尝试多次后依然会出现 “此时不应该有do”
希望各位能给出正确的代码写法,谢谢
  1. if intro.txt==1 (
  2. for %%I in ("intro.txt") do set var=%%~aI
  3. if "%var:r=%" neq "%var%" (echo intro.txt 已添加已读属性) else (set intro.txt=0& call :TEMP)
  4. )
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-7-1 12:48:25 | 显示全部楼层
intro.txt for 这里要空格
 楼主| 发表于 2013-7-1 12:51:17 | 显示全部楼层
回复 2# terse


    代码已修正。但还是会命令错误
发表于 2013-7-1 13:00:09 | 显示全部楼层
  1. setlocal enabledelayedexpansion

  2. if !intro.txt!==1 (
  3.     if exist intro.txt (
  4.         for %%I in ("intro.txt") do (
  5.             set var=%%~aI
  6.         )
  7.     )
  8.     if "!var:r=!" neq "!var!" (
  9.         echo intro.txt 已添加已读属性
  10.     ) else (
  11.         set intro.txt=0
  12.         call :TEMP
  13.     )
  14. )
复制代码
 楼主| 发表于 2013-7-1 14:28:55 | 显示全部楼层
回复 4# Python


    冒昧的问一下,有办法可以不使用变量延迟吗?
发表于 2013-7-1 15:20:15 | 显示全部楼层
试试这样?
  1. if "%intro.txt%" == "1" (
  2.    if exist intro.txt (
  3.       for %%I in ("intro.txt") do (
  4.           for /f "delims=-" %%i in ("%%~aI") do (
  5.               if /i "%%i" == "r" (
  6.                    echo intro.txt 已添加已读属性
  7.               ) else (
  8.                       set intro.txt=0
  9.                       call :TEMP
  10.                      )
  11.           )
  12.       )
  13.    )
  14. )
  15. pause
复制代码
 楼主| 发表于 2013-7-1 16:06:52 | 显示全部楼层
回复 6# terse


    其实没有if exist intro.txt (这一句...前面加错了...原本的代码是这样..
  1. if intro.txt==1 (
  2.     for %%I in ("intro.txt") do set var=%%~aI
  3.     if "%var:r=%" neq "%var%" (echo intro.txt 已添加已读属性) else (set intro.txt=0& call :TEMP)
  4. )
复制代码
 楼主| 发表于 2013-7-1 16:08:35 | 显示全部楼层
回复 6# terse


    然后我试了一下你给出的那段代码删除了其中的if exist intro.txt (和后面的)后发现显示不出echo的内容耶..
发表于 2013-7-1 16:23:57 | 显示全部楼层
回复 7# pZjVa0


if intro.txt==1 (
这个条件永远不会成立
因为字符串intro.txt永远不等于1
 楼主| 发表于 2013-7-1 16:26:16 | 显示全部楼层
回复 9# Python
  1. set intro.txt=1
复制代码
这个是因为前面有自定义了属性给 intro.txt
发表于 2013-7-1 17:57:02 | 显示全部楼层
回复 10# pZjVa0


    但你引用的是变量名,不是变量值
发表于 2013-7-1 18:18:28 | 显示全部楼层
本帖最后由 terse 于 2013-7-2 12:34 编辑

回复 7# pZjVa0
if exist intro.txt 的判断 有和没 不影响代码的执行 你的关键的想判断文件属性
话说 变量延迟 有什么不妥吗
原来没把其他属性作分割 修正了

  1. if "%intro.txt%" == "1" (
  2.         for %%I in ("intro.txt") do for /f "delims=ash-" %%i in ("%%~aI") do (
  3.                 if /i "%%i" == "r" (echo intro.txt 已添加已读属性) else (set intro.txt=0& call :TEMP)
  4.         )
  5. )
复制代码
 楼主| 发表于 2013-7-1 19:51:48 | 显示全部楼层
回复 12# terse


    不是这个意思呢,我测试了一下代码执行结果不正确,已经无法文件属性了
发表于 2013-7-1 20:01:13 | 显示全部楼层
回复 13# pZjVa0
检查路径呢
发表于 2013-7-1 20:53:56 | 显示全部楼层
  1. if "%intro.txt%" == "1" (
  2.     for %%I in ("intro.txt") do (
  3.         for /f "tokens=1*delims=rR" %%J in ("-%%~aI-") do (
  4.             if not "%%K"=="" (
  5.                 echo intro.txt 已添加已读属性
  6.             ) else (
  7.                 set intro.txt=0& call :TEMP
  8.             )
  9.         )
  10.     )
  11. )
复制代码
用call 或 goto,嘿嘿呵呵
  1. if "%intro.txt%" == "1" (goto :Main) else exit
  2. :Main
  3. for %%I in ("intro.txt") do set var=%%~aI
  4. if "%var:r=%" neq "%var%" (echo intro.txt 已添加已读属性
  5. ) else set intro.txt=0& call :TEMP
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 10:41 , Processed in 0.021696 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表