我有一个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
文字字符串吗?将字符串括在" "
中会输出"
标记。或者你能想到其他任何解决方案吗?
答案 0 :(得分:2)
问题是1
是批处理文件/ CMD.EXE
中standard output stream的文件描述符。您可以使用此行来解决此问题:
echo ,1 1>> C:\somefile.sql
或者,但更脆弱,只需在1
和>>
重定向之间加一个空格
echo ,1 >> C:\Somefile.sql
更新:如果你真的担心上面例子的尾随空格,你也可以使用
>> C:\Somefile.sql echo ,1
即。您也可以将重定向放在命令前面。就个人而言,我觉得它看起来有点尴尬,但YMMV。
答案 1 :(得分:2)
你有几条路线要去:
将重定向放在行的开头:
> file echo foo
将echo
括在括号中:
(echo foo) > file
在后一种情况下, 以^)
为单位转义右括号,在可能的前者中,取决于周围代码的外观
答案 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
是等价的。