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

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

[复制链接]
发表于 2022-3-19 00:11:50 | 显示全部楼层 |阅读模式
想写一个查询指定目录下所有的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 的操控比较迷惑
发表于 2022-3-19 08:36:12 | 显示全部楼层
if语句中有这样形式的表达方法:
  1. IF [NOT] string1==string2 command
复制代码
你前一个代码if语句中变量替换含有等号,你懂的电脑非人脑,程序自己会认为可能是使用if上面的表达方法,但少了一个等号,所以会报错。
可以将代码中if语句错误写法修正如下:
  1. if "!file:debug=!" NEQ "%%i" echo !file!
复制代码
 楼主| 发表于 2022-3-19 11:49:26 | 显示全部楼层
回复 2# qixiaobin0715


明白了明白了,按照你说的方法试了一下,果然没问题了,感谢感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 05:54 , Processed in 0.017887 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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