Echo文字字符串?

时间:2012-09-04 10:56:24

标签: windows command-line cmd command-prompt xp-cmdshell

我有一个SQL过程调用命令shell将SQL转储写入文件。以此编辑文件为例:

VALUES(
  @SomeVar
  ,1
)

程序调用:

echo VALUES(>> C:\somefile.sql
echo @SomeVar>> C:\somefile.sql
echo ,1>> C:\somefile.sql
echo )>> C:\somefile.sql

,1行外,此方法正常。如果在CMD中运行echo ,1>> C:\somefile.sql,您将看到C:\ somefile.sql仅包含,

我的理论是echo 认为它可以接受多于1个参数。

如果您将命令修改为echo ,1blah>> C:\somefile.sql,则效果非常好。

我可以修改我的程序,检查该行是否包含一个,后跟一个数字,后面没有任何内容,并在数字前加上^来转义它。但这有点痛苦。

此外,echo 1>> C:\somefile.sql还会写Echo is ON

CMD中有echo文字字符串吗?将字符串括在" "中会输出"标记。或者你能想到其他任何解决方案吗?

4 个答案:

答案 0 :(得分:2)

问题是1是批处理文件/ CMD.EXEstandard output stream的文件描述符。您可以使用此行来解决此问题:

echo ,1 1>> C:\somefile.sql

或者,但更脆弱,只需在1>>重定向之间加一个空格

echo ,1 >> C:\Somefile.sql

更新:如果你真的担心上面例子的尾随空格,你也可以使用

>> C:\Somefile.sql echo ,1

即。您也可以将重定向放在命令前面。就个人而言,我觉得它看起来有点尴尬,但YMMV。

答案 1 :(得分:2)

你有几条路线要去:

  1. 将重定向放在行的开头:

    > file echo foo
    
  2. echo括在括号中:

    (echo foo) > file
    
  3. 在后一种情况下, ^)为单位转义右括号,在可能的前者中,取决于周围代码的外观

答案 2 :(得分:1)

转走结尾号码。

echo ,^1> C:\Somefile.sql

答案 3 :(得分:0)

您可以输出文字字符串。回显的任何和所有参数都被重定向。问题是你的字符串和重定向之间没有空格。 1>1>>>的特殊版本(管道输出到文件,如果存在则替换)和>>(管道输出并附加到文件,如果它存在则创建它不存在)。它们重定向标准输出(C ++中的stdout,C#中的Console.Out)。 2>2>>重定向标准错误输出(C ++中的stderr,C#中的Console.Error)。

例如:

echo 111 > a.txt
echo 111 1> a.txt

是等价的。