如何在批处理脚本中将“2”(不带引号)输出到文件?

74

如何从批处理脚本中将数字2输出到文件中?

这种方法并不可行:

Echo 2>> file.txt

因为2>>是一个特殊命令。 :(

11个回答

340

鲜为人知的特性:重定向操作符可以放在该行的任何位置。

>>file.txt echo 2

74

使用(ECHO 2)>>file.txt命令,它将输出2且无空格。


+1 哦天啊,太棒了!我完全没想到那个。 :) - user541686
除非它有括号(对吧?):P 现在(显然这是一个单独的问题),我如何将任意文件名输出到另一个文件中?它可能包含括号、引号、数字等等... - user541686
2
你知道,我想我会把这个问题单独提出来问。 :) - user541686
很棒的解决方案,但似乎仍然可能存在CRLF。我们如何处理这个不可阻挡的威胁? - My Stack Overfloweth
这个链接中的答案展示了如何将数字2输出到一个文件中,而不带有CRLF。链接为:[https://dev59.com/8Gw05IYBdhLWcg3weBlF#38589300]。 - headinabook

36

echo ^2>>file.txt 看起来对我来说是可行的。


但是仍然有一个CRLF在后面(给我们3个字节)。如何停止它? - Pacerier
@Pacerier -- 请参考此答案,了解如何将数字2输出到文件中而不带有CRLF。 - headinabook
@Pacerier 你确定这是提问者的要求吗? - user6250760

31

使用 ^ 转义符:

Echo ^2>> file.txt

顺便问一下,这背后的逻辑是什么? - Pacerier
4
@Pacerier - 在这个上下文中,“2”有一个特殊的含义。因此,^ 转义字符被用来将“2”看作普通字符处理。 - Moe Sisko

11
echo.2>>text.txt

是的,这很奇怪。


4
这很奇怪,只有在没有空格、制表符或 ,;=( 中的任何一个才能正常工作。这个例子 echo.hello(you2>>text.txt 会失败。 - jeb
@Kornel,但是仍然有一个CRLF在后面(给我们3个字节)。如何停止它? - Pacerier
这个链接中的答案展示了如何将数字2输出到一个文件中,而不带有CRLF。链接在此:https://dev59.com/8Gw05IYBdhLWcg3weBlF#38589300 - headinabook
如果当前目录中有一个名为echo.(没有扩展名)的文件,则echo.可能会失败,因此最好使用echo/... - aschipfl

10

另一种方法

echo>>file.txt 2

但是仍然有一个CRLF在后面(给我们3个字节)。如何停止它? - Pacerier
这个链接上的答案展示了如何在不添加CRLF的情况下将数字2输出到文件。 - headinabook

6

或者您可以使用延迟扩展。

setlocal EnableDelayedExpansion
set "var=2"
echo(!var!>> file.txt

但是仍然有一个CRLF在后面(给我们3个字节)。如何停止它? - Pacerier
这个链接上的答案展示了如何在不添加CRLF的情况下将数字2输出到文件。 - headinabook

3

如果您需要准确的写入,请使用此命令

(ECHO |set /p=2)>>file.txt

DMan的命令将在“2”后面产生一个0x0D0A换行符。

3
这将把ERRORLEVEL设置为1。如果更喜欢将ERRORLEVEL设置为0,可以使用类似 (echo | set /p dummyName="2") > file.txt 的语句。 (来源) - headinabook
1
你可以避免使用管道,而改用这个命令:< nul set /P ="2" > file.txt,但是这样 ErrorLevel 就会变成 1,即使使用一个虚拟变量也是如此... - aschipfl
@headinabook 不仅不会更清晰,而且它会将错误级别设置为0。(如果你想要0,只需使用(call )!) - ScriptKidd

2
要在不添加换行符的情况下将数字写入文件,您可以使用以下代码:
cmd /C set /A "2">file.txt

这个方法有效是因为在命令提示符环境下执行set /A命令时,它会返回(最后的)结果(不带换行符)。所以当你直接在cmd.exe中运行时,就可以使用这种方法。

如果你已经在命令提示符下工作,可以简单地使用以下命令:

set /A "2">file.txt

虽然你不能在批处理文件中使用它,但你需要额外使用cmd /C来强制正确的执行上下文。

不用说,这当然只能输出数字,或者准确地说,带符号的32位整数。


-1

转义字符 '2'

在Linux中: echo \2>file.txt

在Windows中: echo ^2>file.txt

在Windows中这个也可以工作

echo.2>file.txt echo和点之间没有空格


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接