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

[文本处理] [已解决]批处理for命令使用的 if 带括号,运行时一闪而过无法正常运行

先看代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d %~dp0
  4. echo.>ip_output.txt
  5. for /f "tokens=1-3" %%i in (ip_tmpok.txt) do (
  6. set tp=%%j
  7. if !tp:~0,3!==NA_ (
  8. set t=!tp:NA_=!
  9. set err=1 ) else (
  10. set err=0
  11. )
  12. (echo %%i %%k gws !t! !err! 0)>>ip_output.txt
  13. )
  14. pause
复制代码
ip_tmpok.txt文本片段
  1. 77.234.90.140 12712 *.googlevideo.com gvs 1.0
  2. 150.100.16.94 12821 *.googlevideo.com
  3. 109.245.221.47 13253 *.googlevideo.com
  4. 61.238.239.209 NA_183 *.googlevideo.com gvs 1.0
  5. 106.103.1.156 NA_239 *.googlevideo.com gvs 1.0
  6. 172.217.26.155 NA_239 *.google.com gws
  7. 172.217.26.138 NA_246 *.googleapis.com gws
复制代码
问题点:
代码运行时,直接一闪而过,没有输出具体内容。
去掉if 语句,批处理能输出内容。
因此怀疑是 if 中的括号的问题。但对 if 中的括号用 ^ 进行转义也没效果(对'(' 和 ')' 分别转义,各种组合都试了下,如只转义一个')',转义全部')'等,但都不行。)
这个代码怎么改?
还有,这种嵌套括号,是不是都是靠转义来处理的?
1

评分人数

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

建议先把基础学好
if "!tp:~0,3!"=="NA_"
1

评分人数

TOP

if语句少加了双引号,应为:if "!tp:~0,3!"=="NA_"
多看看教程:http://www.bathome.net/viewthread.php?tid=2530&highlight=if

TOP

回复 2# pcl_test

是字符串啊。有段时间没接触批处理了,看到这个
  1. IF [NOT] string1==string2 command
复制代码
完全没反应过来要加"".
谢谢了

TOP

回复 3# idos


    有学习过的,然而有段时间不用,忘记了

TOP

如果不加双引号,实际要转义的是字符串截取 !tp:~0,3! 中的逗号
如无特别说明,代码测试环境均为 XP SP3

TOP

回复 6# cutebe


    ,不是普通的字符吗?为什么会需要转义?

TOP

回复 7# sishentibu


逗号在某些情况下是作为命令分隔符之一进行处理的,比如这个教程里面第25页提到的例子:
http://bbs.bathome.net/thread-31727-1-1.html

TOP

回复 8# GNU


    查了下,真是特殊字符,一直没注意。。

TOP

返回列表