windows - 长字符串时Echo丢失^ 字符

  显示原文与译文双语对照的内容
0 0

在 Windows 批处理脚本中,我有以下命令

echo =%%k-16,INDIRECT.EXT^("'C:Users...Analysis[ObsStreamflow.xlsx]Sheet1'^!A%%k"^),INDIRECT.EXT^("'C:Users...Analysis[sim%%j.xlsx]Sheet1'^!B!val!"^),^=C%%k/1000,^=D%%k-B%%k,^=ABS^(E%%k^),^=(E%%k^)^^2,=^(B%%k-B10^),=Sqrt^(B%%k^),=SQRT^(D%%k^),=^(J%%k - B13^)^^2>> t%%j.csv

省略的文件路径为 38个字符长( 我不认为我是在界限,但是以防这是问题) 。 这是我. bat 文件中的一行,这里显示为多行,以使内容更加可读。

输出大多是正确的,除了我有 ^^2,它只是 2 ( 我有= ( E1 ) 2 和= ( J1-B13 ) 2. 如果我省略了 Indirect.Ext 文本

echo =%%k-16,a1,b1,^=C%%k/1000,^=D%%k-B%%k,^=ABS^(E%%k^),^=(E%%k^)^^2,=^(B%%k-B10^),=Sqrt^(B%%k^),=SQRT^(D%%k^),=^(J%%k - B13^)^^2>> t%%j.csv

它打印正确,所以相关的评论显示为= ( E1 ) ^2和= ( J1-B13 ) ^2,这就是我所在的。

我没有找到一个答案,所有我找到的都只是指向使用^^来返回^ 。 我不能将这个命令分成多行,我需要它是csv格式的一行。

任何建议都非常感谢,我只需要使用一周,不需要一个优雅的解决方案,只有一个。 我非常新的( 而且一般编程) 脚本,将在平均时间内尝试不同的思想。

时间:原作者:5个回答

0 0

只是感叹号为你带来了问题。

如果至少有一个 位于你的行( 。启用延迟扩展) 中,则将启动第二个插入符号转义阶段。!
在这里阶段中不考虑引号,仅插入符号。

一个小测试

setlocal EnableDelayedExpansion
echo one^1
echo two^^2
echo two^^2 With exclam!
echo five^^^^^& With exclam!

输出

one1
two^2
two2 With exclam
four^& With exclam

所以在你的样本里你需要五个符号。
四个要创建一个插入符和最后一个要转义的),因为特殊字符的转义只需要一次。

原作者:
0 0

不确定你的具体问题是什么,但是你可以使用 Windows 中的技巧来模拟 echo -n ( 不带换行符的echo ) 。

命令:

<nul:> file.csv set/p junk=first field
<nul:>> file.csv set/p junk=,second field
>> file.csv echo, third field

将导致一个 单行:

first field,second field,third field

这可以能使你更容易避免特定的问题,并且清楚地清理脚本,使它的更易于阅读。

它工作,因为 set/p var=prompt 是输入命令。 它首先输出没有换行符的prompt,然后等待用户输入某些东西,并将它的分配给 var 环境变量。

通过从 nul: 获取输入,你基本上给它一个空字符串,这样它就不会等待。 将提示输出到 file.csv 而不使用换行符。

不管怎样,对于 something,我将绕过 cmd.exe,让它更强大一些,比如 CYGWIN 或者 MINGW ( 这需要安装,但很值得),甚至是VBScript脚本( 默认情况下应该在 Windows 上),你可以更轻松地控制输出。

原作者:
...