Board logo

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

作者: Pchief    时间: 2014-12-22 13:05     标题: [已解决]批处理命令 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!。”出现的原因?
作者: DAIC    时间: 2014-12-22 14:43

  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. )
复制代码

作者: yiwuyun    时间: 2014-12-23 07:41

  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. )
复制代码
比较二者。
作者: DAIC    时间: 2014-12-23 09:39

回复 3# yiwuyun


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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2