Board logo

标题: [文件操作] [已解决] 批处理内嵌if出现语法错误 [打印本页]

作者: pZjVa0    时间: 2013-7-1 12:31     标题: [已解决] 批处理内嵌if出现语法错误

本帖最后由 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. )
复制代码

作者: terse    时间: 2013-7-1 12:48

intro.txt for 这里要空格
作者: pZjVa0    时间: 2013-7-1 12:51

回复 2# terse


    代码已修正。但还是会命令错误
作者: Python    时间: 2013-7-1 13:00

  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. )
复制代码

作者: pZjVa0    时间: 2013-7-1 14:28

回复 4# Python


    冒昧的问一下,有办法可以不使用变量延迟吗?
作者: terse    时间: 2013-7-1 15:20

试试这样?
  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
复制代码

作者: pZjVa0    时间: 2013-7-1 16:06

回复 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. )
复制代码

作者: pZjVa0    时间: 2013-7-1 16:08

回复 6# terse


    然后我试了一下你给出的那段代码删除了其中的if exist intro.txt (和后面的)后发现显示不出echo的内容耶..
作者: Python    时间: 2013-7-1 16:23

回复 7# pZjVa0


if intro.txt==1 (
这个条件永远不会成立
因为字符串intro.txt永远不等于1
作者: pZjVa0    时间: 2013-7-1 16:26

回复 9# Python
  1. set intro.txt=1
复制代码
这个是因为前面有自定义了属性给 intro.txt
作者: CrLf    时间: 2013-7-1 17:57

回复 10# pZjVa0


    但你引用的是变量名,不是变量值
作者: terse    时间: 2013-7-1 18:18

本帖最后由 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. )
复制代码

作者: pZjVa0    时间: 2013-7-1 19:51

回复 12# terse


    不是这个意思呢,我测试了一下代码执行结果不正确,已经无法文件属性了
作者: terse    时间: 2013-7-1 20:01

回复 13# pZjVa0
检查路径呢
作者: apang    时间: 2013-7-1 20:53

  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
复制代码

作者: pZjVa0    时间: 2013-7-1 22:24

回复 15# apang


    感谢。代码测试成功,简洁。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2