主页 > 经验 >
引号在批处理中的特殊应用
在批处理中,引号(")有时作为一个“特殊字符”的面貌出现,给批处理的编写还会造成一定的困扰,但是它在批处理代码编写的过程中又起到一些不可替代的作用,下面列举它的一些特殊使用。
1、含空格的文件名;
测试:先在F盘下新建一个文本文档(文件名为:新建 文本文档.txt),下面我们尝试用批处理来调用它,在命令行下,输入代码:start "" f:\新建 文本文档.txt,看看有什么提示?(会提示找不到 新建 文件),这是因为start命令在处理参数的时候,是以空格作为分隔符的,它只把"新建"作为参数传给了start命令本身,而F盘下又并没有这样的文件,所以会提示找不到。那我们如何通过命令行打开象 新建 文本文档.txt 这样含有空格的文件呢?我们可以这么办:把含有空格的文件名用引号括起来,如:
start "" F:\"新建 文本文档.txt"
或者:start "" "F:\新建 文本文档.txt"
在用批处理处理处理 含有 空格 的注册表键时,有同样的应用方式;
2、定义变量内容时,含有特殊字符;
先测试代码:

我们可以看到,这些代码执行有误,原因是 > 在批处理中是作为定向符(特殊符号)的,在这里不能作为普通字符传给变量test,如果要将它作为普通字符传给变量test,可以有两中办法:一是常见的转义(就是在特殊字符前加个 ^),二就是使用 引号,如将代码改为以下,即可:

这种方法在传递用户输入的变量时,用途比较广,因为你不知道用户究竟输没输入特殊字符,同时,他输入特殊字符的时候,也不可能还专门去加个 ^ ,所以为了防止程序意外(碰到用户输入特殊字符时)退出,往往写成这样的形式(示例):

3、参数中的应用;
不管是 批处理文件 本身的参数,还是标签的参数,他们都是以空格作为分割符的,这样就会产生一些问题。
举例说明,测试代码:

以上代码的标签 :msg 的作用就是显示传给它的字符,如这里 call :msg ok,就是显示ok(相当于echo ok),如果要显示“我是好人”,只需要 call :msg 我是好人 即可。
但是如果要它显示 “我是 好人”,你这样调用:call :msg 我是 好人,显示的结果却是 我是,因为批处理只将空格前面的“我是”传给标签 msg,如果我们一定要显示出 “我是 好人”,就要将代码改成这样(将 我是 好人用引号括起来):

1、含空格的文件名;
测试:先在F盘下新建一个文本文档(文件名为:新建 文本文档.txt),下面我们尝试用批处理来调用它,在命令行下,输入代码:start "" f:\新建 文本文档.txt,看看有什么提示?(会提示找不到 新建 文件),这是因为start命令在处理参数的时候,是以空格作为分隔符的,它只把"新建"作为参数传给了start命令本身,而F盘下又并没有这样的文件,所以会提示找不到。那我们如何通过命令行打开象 新建 文本文档.txt 这样含有空格的文件呢?我们可以这么办:把含有空格的文件名用引号括起来,如:
start "" F:\"新建 文本文档.txt"
或者:start "" "F:\新建 文本文档.txt"
在用批处理处理处理 含有 空格 的注册表键时,有同样的应用方式;
2、定义变量内容时,含有特殊字符;
先测试代码:

我们可以看到,这些代码执行有误,原因是 > 在批处理中是作为定向符(特殊符号)的,在这里不能作为普通字符传给变量test,如果要将它作为普通字符传给变量test,可以有两中办法:一是常见的转义(就是在特殊字符前加个 ^),二就是使用 引号,如将代码改为以下,即可:

这种方法在传递用户输入的变量时,用途比较广,因为你不知道用户究竟输没输入特殊字符,同时,他输入特殊字符的时候,也不可能还专门去加个 ^ ,所以为了防止程序意外(碰到用户输入特殊字符时)退出,往往写成这样的形式(示例):

3、参数中的应用;
不管是 批处理文件 本身的参数,还是标签的参数,他们都是以空格作为分割符的,这样就会产生一些问题。
举例说明,测试代码:

以上代码的标签 :msg 的作用就是显示传给它的字符,如这里 call :msg ok,就是显示ok(相当于echo ok),如果要显示“我是好人”,只需要 call :msg 我是好人 即可。
但是如果要它显示 “我是 好人”,你这样调用:call :msg 我是 好人,显示的结果却是 我是,因为批处理只将空格前面的“我是”传给标签 msg,如果我们一定要显示出 “我是 好人”,就要将代码改成这样(将 我是 好人用引号括起来):

- 最近发表
- 赞助商链接