使用"\n"或"\r\n"时,将output.value写入文件时不会添加新的换行符。

16 浏览
0 Comments

使用"\n"或"\r\n"时,将output.value写入文件时不会添加新的换行符。

如何在批处理文件中将长命令分成多行?

0
0 Comments

在使用output.value将内容写入文件时,如果使用\n或\r\n来添加换行符,会导致新的一行不换行的问题。这个问题的出现是因为在Windows中,caret(^)符号在行末时会将下一行添加到当前行,并将下一行的第一个字符转义。caret符号可以使用多次,但整行的长度不能超过约8192个字符(适用于Windows XP、Windows Vista和Windows 7)。

为了避免下一个字符被转义,可以在caret符号之前使用重定向。重定向符号必须紧跟在caret符号之前。但是,对于在caret符号之前使用重定向的情况,存在一个奇怪的现象:如果在caret符号处放置一个标记(token),该标记将被删除。

另外,也可以将换行符嵌入到字符串中。在使用delayed expansion时,可以通过在字符串中使用caret符号和换行符实现换行效果。使用如下代码可以实现:

setlocal EnableDelayedExpansion

set text=This creates ^

a line feed

echo Test7: %text%

echo Test8: !text!

需要注意的是,空行对于成功实现换行效果非常重要。这种方法只适用于delayed expansion,否则在换行符之后的内容将被忽略。

最后一个代码块中的换行符示例不会显示空行,尽管它确实存在(至少在IE7中不会显示)。可以尝试使用blockquote重新格式化。

关于这个问题,问题是我们是否应该支持一个没有遵循规则的不好的工具(有人称之为浏览器,但它并不是)还是应该切换到其他浏览器。

有用户在设置变量时,将值用双引号括起来,例如set var="text here ^ ",但是这种方式不起作用。需要将双引号移除才可以。

在写一个失败的cmd脚本的例子时,用户发现了一个类似的问题,并找到了一个相关的问题,链接为stackoverflow.com/questions/4643376/。

如果下一行以引号开头,例如copy "file1.txt" "file2.txt",上述方法不起作用!需要在caret符号之后添加一个空格,即copy "file1.txt" "file2.txt"。

如果想要在下一行开头使用管道符号|(或&),确保在其之前添加一个空格!否则它将被转义,并不能按预期工作。可以在stackoverflow.com/q/73930319/3705191中找到详细的解释。

0
0 Comments

在使用output.value to file将内容输出到文件时,使用\n或\r\n时,不会添加新的换行符的问题是由以下原因引起的:

在Windows中,换行符由两个字符组成:回车符(\r)和换行符(\n)。但是,在使用output.value to file时,\n或\r\n不会被解释为换行符,而是按照原样输出。

解决这个问题的方法是在要换行的地方添加一个空格。

以下是一个示例:

copy file1.txt file2.txt

在使用output.value to file时,应该这样写:

copy file1.txt^

file2.txt

如果想要在换行处不加空格,可以在^之前和命令文本之后添加一个空格。

这个问题似乎只限于额外的前两行?

对我来说,使用sqlcmd.exe执行长SQL查询的SQL脚本非常好用。延迟扩展甚至允许我转义大于和小于字符。谢谢!

不,你总是可以添加[SPACE]+[^]和两个空行,总计2个换行符,当使用echo时。

我明白你的意思。如果你想要进行行继续,我不认为在行尾的^之前或之后需要有一个空格。更具体地说,我认为你可以通过以下两种方式之一来完成:1)在^之前加一个空格,下一行不需要有空格;2)在^之前或之后没有空格,但下一行以一个空格开头。

在使用^时,始终以空行结束,请参见Simple carat in batch file consumes all memory

这个答案中关于^周围空格的描述真的让人困惑。很简单:在结果中,^及其后面的换行符不存在。所以,如果应该在那里有一个空格(例如在命令参数之间),你需要在那里放一个空格。我在这里重新写了这个答案here。我通常会编辑答案,但对于完全重写别人答案的情况,这似乎是错误的。

"在copy和file1.txt之后的新行上使用^将不起作用" 这是不正确的。你可以在任何地方拆分行,甚至可以在一个单词的中间,比如co^␍py ^␍file1 ^␍file2。我建议你删除你的评论,以避免混淆,尤其是这个问题是一个非常流行的问题。

我试图使用^将我的长命令拆分成7行,它完全正常工作(Windows 7)。下面有一个回答说,拆分命令的总长度有限制,也许这就是你的瓶颈?你可以使用像'type'这样的短的通用命令进行测试,以显示一些文件,比如1.txt、2.txt等。

这里的一个容易忽视的问题是^必须是行的最后一个字符-即^之后不能有空格。我曾经遇到过这个问题,原来是在^之后有一堆空格,但在我使用的编辑器中很难看到。

确保不要在变量周围加双引号,这需要额外的技巧使其工作:stackoverflow.com/questions/4643376/…

以及,由于行继续符^的转义作用,以特殊字符<>|"&^开头的换行部分将失去其特殊含义。因此,习惯于每个换行部分以空格开头是一个安全的做法。

0
0 Comments

问题的出现原因:在将output.value的内容写入文件时,使用\n或\r\n作为换行符时,没有添加新的换行符。

解决方法:在每一行的末尾添加一个空格。

在Windows系统中,可以使用^作为换行符,但是需要注意的是,^和其后的换行符会被完全删除,因此如果将^放在需要空格的位置(例如参数之间),请确保同时添加空格(可以在^之前添加空格,或者在下一行的开头添加空格)。

为了可读性和代码的清晰性,最好只在参数之间进行换行,并确保包含空格。

此外,在每一行的开头添加一个空格,可以避免出现字符在下一行开头被转义的问题。如果下一行开头的字符具有特殊含义(例如&或|),那么它将失去其特殊含义,被解释为纯文本字符。为了解决这个问题,需要在下一行的开头添加一个空格。

需要注意的是,在批处理文件的最后一个字符不能是^,否则可能会出现严重的问题。

下面是一个在下一行开头转义字符的例子:

xcopy file1.txt file2.txt ^

& echo copied successfully

这个例子不会起作用,因为&会被转义并失去其特殊含义,从而将"file1.txt file2.txt & echo copied successfully"作为参数发送给xcopy,导致错误。

为了解决这个问题,在下一行的开头添加一个空格。

以上是这个问题的出现原因和解决方法。

0