Board logo

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

作者: fanhuaj    时间: 2022-3-19 00:11     标题: 求批处理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 的操控比较迷惑
作者: qixiaobin0715    时间: 2022-3-19 08:36

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

作者: fanhuaj    时间: 2022-3-19 11:49

回复 2# qixiaobin0715


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




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