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

[文件操作] [已解决] 批处理内嵌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. )
复制代码
1

评分人数

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

intro.txt for 这里要空格

TOP

回复 2# terse


    代码已修正。但还是会命令错误

TOP

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

TOP

回复 4# Python


    冒昧的问一下,有办法可以不使用变量延迟吗?

TOP

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

TOP

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

TOP

回复 6# terse


    然后我试了一下你给出的那段代码删除了其中的if exist intro.txt (和后面的)后发现显示不出echo的内容耶..

TOP

回复 7# pZjVa0


if intro.txt==1 (
这个条件永远不会成立
因为字符串intro.txt永远不等于1

TOP

回复 9# Python
  1. set intro.txt=1
复制代码
这个是因为前面有自定义了属性给 intro.txt

TOP

回复 10# pZjVa0


    但你引用的是变量名,不是变量值

TOP

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

TOP

回复 12# terse


    不是这个意思呢,我测试了一下代码执行结果不正确,已经无法文件属性了

TOP

回复 13# pZjVa0
检查路径呢

TOP

  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

评分人数

TOP

返回列表