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

[代码合集] [已解决]批处理可以/不能对if(判断条件)和for中的%%i使用哪些操作?

[复制链接]
发表于 2012-11-2 09:31:56 | 显示全部楼层 |阅读模式
本帖最后由 snkJC08 于 2012-11-2 15:49 编辑

if中:
我这样使用会出错:set str1=string123456&& echo !str1! && if !str1:~-6,2!==123456 (echo 0000) else (echo 111)
但是这样就没错:set str1=string123456&& echo !str1! && if !str1:~-6!==123456 (echo 0000) else (echo 111)

for中:
这样使用判断的时候得到的值不是想要的值:for %%i in (*.txt) do if !%%i:~13!==!n! ( echo %%i ) else (echo 文件名不匹配)        ::这里判断的时候!%%I:~13!得到的值我开始使用echo输出为:~13
同上面if中一样,如果这样使用也会出错:for %%i in (*.txt) do if !%%i:~-6,2!==!n! ( echo %%i ) else (echo 文件名不匹配)

这样使用可以正确得到:for %%i in (*.txt) do set str=%%i&& if !str:~13!==!n! ( echo %%i ) else (echo 文件名不匹配)

希望高手们能解惑!可以/不能对if(判断条件)和for中的%%i使用哪些操作!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-11-2 12:07:50 | 显示全部楼层
本帖最后由 tmplinshi 于 2012-11-2 12:35 编辑
if中:
我这样使用会出错:set str1=string123456&& echo !str1! && if !str1:~-6,2!==123456 (echo 0000)  ...
snkJC08 发表于 2012-11-2 09:31



, 会被当成分隔符。相当于 if !str1:~-6 2!==123456 (echo 0000)  ...
, 被当作分隔符的示例: if,!str1:~-6!==123456 (echo 0000) else (echo 111)

解决方法:
方法一: if !str1:~-6^,2!==123456 (echo 0000) else (echo 111)

方法二: if "!str1:~-6,2!" == "123456" (echo 0000) else (echo 111)

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-11-2 14:24:08 | 显示全部楼层
回复 2# tmplinshi


    谢谢!原来如此啊!这个种情况只会在if和for里面出现嘛?
因为我这样使用就不会错:
  1. set str1=string123456
  2. set num=%str1:~-6,2%&& echo !num!
复制代码
 楼主| 发表于 2012-11-2 14:27:51 | 显示全部楼层
回复 2# tmplinshi


    还有就是
  1. for %%i in (*.txt) do if !%%i:~13!==!n! ( echo %%i ) else (echo 文件名不匹配)
  2. ::这里判断的时候!%%I:~13!得到的值我开始使用echo输出为:~13
复制代码
这是为什么啊?不能使用%%i操作嘛?
发表于 2012-11-2 14:33:37 | 显示全部楼层
回复  tmplinshi


    还有就是这是为什么啊?不能使用%%i操作嘛?
snkJC08 发表于 2012-11-2 14:27



是的,不可以这样用。似乎每一个人都曾经尝试过这样使用(我也尝试过),但就是不能这样用。
发表于 2012-11-2 14:51:59 | 显示全部楼层
回复 4# snkJC08


    批处理中的变量实际上都是指 cmd 进程的环境变量,针对的是字符串,使用 %str% !str! 的形式来读取,我们可以对它们进行变量偏移、变量替换等操作。而 %%i 是 for 特有的参数变量,针对的是文件,使用 %%i 的形式来读取,可以取文件名、完整路径、短名、大小、修改日期等等,使用与环境变量截然不同的语法。
    总之二者不是一回事,不能混为一谈。

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-11-2 15:07:05 | 显示全部楼层
回复 6# CrLf


    哦!谢谢了啊!
 楼主| 发表于 2012-11-2 15:50:24 | 显示全部楼层
回复 5# tmplinshi


    谢谢解答!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 19:39 , Processed in 0.022251 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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