zoukankan      html  css  js  c++  java
  • DOS命令行中的双引号

    DOS命令窗口下,运行C:Program FilesWinRARWinRAR.exe,提示如下错误:

    因为C:Program FilesWinRARWinRAR.exe中含有空格,它被分成了两个部分:C:ProgramFilesWinRARWinRAR.exeDOS命令窗口会把C:Program当做C:Program.exeC:Program.bat,而把FilesWinRARWinRAR.exe当做命令行参数传递给C:Program.exeC:Program.bat。因为C:Program.exeC:Program.bat都不存在,所以显示了上图所示的错误信息。

    解决办法就是加上双引号,如下图所示:

    这样,DOS命令窗口就知道要执行C:Program FilesWinRARWinRAR.exe了。

    还可以这样加双引号:

    所以:DOS命令行中的双引号一般情况下都会被忽略掉,它的作用仅仅是防止空格被当做分隔符。

    现在,如下图所示,想给程序vsyasm.exe传递一个参数,此参数就是一个双引号。结果就是vsyasm根本接收不到双引号这个参数。

    此时,命令应该写成这样:

    也就是说:DOS命令行中的"会被解释为"

    接下来,坑来了。如下图所示:调用vsyasm.exe编译d:1.asm,输出目录被设置为c:

    上述命令行预期的是被分成四部分:

    vsyasm 

    -o 

    c: 

    d:1.asm 

    事实上却是被分成了三个部分:

    vsyasm 

    -o 

    c:" d:1.asm 

    都是"惹的祸。解决办法是这样的,如下图所示:

    上述命令行被分成预期的四部分:

    vsyasm 

    -o 

    c: 

    d:1.asm 

    也就是说:双引号前的两个反斜杠会被替换为一个。上图双引号内的反斜杠后面紧跟着双引号,所以两个反斜杠被解释为一个反斜杠,同时右边的双引号说明字符串结束了。

    再看看下图所示的命令行会被解释成什么?

    双引号内部的反斜杠后面紧跟着双引号,所以前两个反斜杠被解释为一个反斜杠,"被解释为字符串内部的双引号,因为字符串未结束,所以后面的 d:1.asm也会和 c:"连接起来,最终被解释为三部分:

    vsyasm 

    -o 

    c:" d:1.asm 

    总之:DOS命令行中的"就是一个大坑,需要慎之又慎。

  • 相关阅读:
    GDOI模拟赛Round 1
    Codeforces 241B
    Codeforces 325E
    Codeforces 235E
    Codeforces 293B
    Codeforces 263E
    快速傅里叶变换FFT
    后缀自动机
    NOI2011 Day2
    NOI2014 Day2
  • 原文地址:https://www.cnblogs.com/hanford/p/6168649.html
Copyright © 2011-2022 走看看