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

[文本处理] [已解决]批处理命令 if 后面跟子串运算符的问题

本帖最后由 Pchief 于 2014-12-22 16:35 编辑

我的代码是这样:
  1. if [%2] equ [] (
  2. echo no arg!
  3. goto endp
  4. )
  5. setlocal EnableDelayedExpansion
  6. set argline=%*
  7. set /a in_quote=0
  8. :loop1
  9. if !argline:~0,1! == ^" (
  10. set /a in_quote=1-!in_quote!
  11. goto strip1st
  12. )
  13. if !in_quote! equ 1 goto strip1st
  14. if !argline:~0,1! == ^  goto endp
  15. :strip1st
  16. set argline=!argline:~1!
  17. goto loop1
  18. :endp
  19. echo !argline!
  20. endlocal
  21. pause
复制代码
把这段代码存为文件 repl_np.bat,运行结果如下
  1. >test
  2. >call "C:\Documents and Settings\User\桌面\batch_test\repl_np.bat"   notepad  C:
  3. \"Program Files"\sc1\sc1.exe
  4. >if [C:\"Program Files"\sc1\sc1.exe] EQU [] (
  5. echo no arg!
  6. goto endp
  7. )
  8. >setlocal EnableDelayedExpansion
  9. >set argline=notepad  C:\"Program Files"\sc1\sc1.exe
  10. >set /a in_quote=0
  11. 此时不应有 1!。
  12. >if !argline:~0,1! == ^" (
  13. >
复制代码
其中 call 那一行是我运行的实际命令行,请教一下那个“此时不应有1!。”出现的原因?

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str="bbs.bathome.net"
  4. if !str:~0^,1! == ^" (
  5.     echo yes
  6. ) else (
  7.     echo no
  8. )
  9. pause
复制代码
  1. @echo off
  2. set str="bbs.bathome.net"
  3. if ^%str:~0,1% == ^" (
  4.     echo yes
  5. ) else (
  6.     echo no
  7. )
复制代码
1

评分人数

    • Pchief: 很好,如果能说明下原因就更好了技术 + 1

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str="bbs.bathome.net"
  4. set a=^"
  5. if "!str:~0,1!" == "!a!" (
  6.     echo yes
  7. ) else (
  8.     echo no
  9. )
复制代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set str="bbs.bathome.net"
  4. if "!str:~0,1!" == "^"" (
  5.     echo yes
  6. ) else (
  7.     echo no
  8. )
复制代码
比较二者。

TOP

回复 3# yiwuyun


第一段代码的第4行里面的 ^ 可以省略吧
第二段代码报错,语法不正确。

TOP

返回列表