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

[文件操作] 求批处理for命令里操作比较形式变量报错的问题

想写一个查询指定目录下所有的makefile所在路径,并且要过滤一些文件夹,
但是按照如下方式写,就会提示此处不应有!=,错误代码为  !file:debug=! NEQ %%i
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set rootpath=C:\Source\Repos\server
  4. cd /d %rootpath%
  5. for /r %rootpath% %%i in (Makefile) do (
  6. set file=%%i
  7. if !file:debug=! NEQ %%i echo !file!
  8. )
  9. pause
  10. endlocal
复制代码
如果换下面这种写法就可以:
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set rootpath=C:\Source\Repos\server
  4. cd /d %rootpath%
  5. for /r %rootpath% %%i in (Makefile) do (
  6. set file=%%i
  7. set tmp=!file:debug=!
  8. if !file! EQU !tmp! echo !file!
  9. )
  10. pause
  11. endlocal
复制代码
这里我没搞懂直接比较为什么会报错,为什么将 !file:debug=! 赋给另一个变量后再比较就没问题了,
请大佬们帮忙指导一下,我是刚开始学bat,对for循环里的形式变量%%i 的操控比较迷惑

if语句中有这样形式的表达方法:
  1. IF [NOT] string1==string2 command
复制代码
你前一个代码if语句中变量替换含有等号,你懂的电脑非人脑,程序自己会认为可能是使用if上面的表达方法,但少了一个等号,所以会报错。
可以将代码中if语句错误写法修正如下:
  1. if "!file:debug=!" NEQ "%%i" echo !file!
复制代码

TOP

回复 2# qixiaobin0715


明白了明白了,按照你说的方法试了一下,果然没问题了,感谢感谢

TOP

返回列表