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

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

本帖最后由 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使用哪些操作!
1

评分人数

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

本帖最后由 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

评分人数

TOP

回复 2# tmplinshi


    谢谢!原来如此啊!这个种情况只会在if和for里面出现嘛?
因为我这样使用就不会错:
  1. set str1=string123456
  2. set num=%str1:~-6,2%&& echo !num!
复制代码

TOP

回复 2# tmplinshi


    还有就是
  1. for %%i in (*.txt) do if !%%i:~13!==!n! ( echo %%i ) else (echo 文件名不匹配)
  2. ::这里判断的时候!%%I:~13!得到的值我开始使用echo输出为:~13
复制代码
这是为什么啊?不能使用%%i操作嘛?

TOP

回复  tmplinshi


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



是的,不可以这样用。似乎每一个人都曾经尝试过这样使用(我也尝试过),但就是不能这样用。

TOP

回复 4# snkJC08


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

评分人数

TOP

回复 6# CrLf


    哦!谢谢了啊!

TOP

回复 5# tmplinshi


    谢谢解答!

TOP

返回列表