Board logo

标题: [其他] 请问下批处理里面什么时候加上引号,什么时候不加? [打印本页]

作者: mar5    时间: 2011-6-22 17:44     标题: 请问下批处理里面什么时候加上引号,什么时候不加?

本帖最后由 mar5 于 2011-6-23 14:23 编辑

看到一些对变量引用的时候,有些加了有些没加,请高手帮我归纳下,应该在什么时候加?

@echo off
set sum=0
call :sub sum 10 20 35
echo 数据求和结果:%sum%
pause
:sub
rem 参数1为返回变量名称
set /a %1=%1+%2
shift /2
if not "%2"=="" goto sub
goto :eof

比如这个地方的%2为啥要加双引号
作者: cxmzlxb    时间: 2011-6-22 17:55

当做字符串时,就需要加,特别是超过8位或是有空格等特殊符号的。
作者: CrLf    时间: 2011-6-22 18:24

双引号是一种特殊的转义符,用于把特殊符号转义成普通字符,也能够将命令中的参数区分开

双引号作为参数分隔符的例子:
  1. findstr .* 1.txt 2.txt
  2. findstr ".* 1.txt" 2.txt
  3. ::这两条的结果是截然不同的
复制代码
双引号作为转义符的例子:
  1. set n=^^
  2. set "n=^^"
  3. ::这两条的结果也是完全不同的
复制代码

作者: Hello123World    时间: 2011-6-22 18:57

  1. set n=^^
  2. ::这条出错,显示more?
  3. set "n=^^"
  4. ::我本以为这条显示^^,结果却显示^,^的优先级高于" ?
  5. ::这两条的结果也是完全不同的
复制代码

作者: mar5    时间: 2011-6-22 19:41

恩  以后学习中我会注意下的  谢了
作者: mar5    时间: 2011-6-22 19:45

@echo off
set sum=0
call :sub sum 10 20 35
echo 数据求和结果:%sum%
pause
:sub
rem 参数1为返回变量名称
set /a %1=%1+%2
shift /2
if not "%2"=="" goto sub
goto :eof
看下这个地方   这里%2为啥要加引号呢?这里应该是对变量的引用吧?
作者: CrLf    时间: 2011-6-22 22:57

4# Hello123World

你是用echo %n%查看的吧?建议用set n或者echo !n!来查看这种存在特殊命令的变量
作者: Batcher    时间: 2011-6-22 23:44

6# mar5


请把代码更新到顶楼,以便他人查看。
作者: CrLf    时间: 2011-6-23 15:12

  1. if not "%2"=="" goto sub
  2. ::这句中的引号有双重作用,既能转义%2中可能存在的特殊字符,也起到了分隔参数的作用,最关键的是用于分隔参数,避免%2为空时出现的语法错误
复制代码





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