我有这段代码
rem Saved in D:\Temp\WriteText.bat
@echo off
@echo -ATTEDIT> ATTEDITChangeName.txt
@echo y>> ATTEDITChangeName.txt
@echo 36x24bdr>> ATTEDITChangeName.txt
@echo SUBTITLE>> ATTEDITChangeName.txt
@echo B209 11.5 TON BRIDGE ELEC LAYOUT 1 ^& 2>> ATTEDITChangeName.txt
@echo 612.9014,43.8533>> ATTEDITChangeName.txt
@echo 618.5063,35.8628>> ATTEDITChangeName.txt
@echo 109.9409,-6.7209>> ATTEDITChangeName.txt
@echo.>> ATTEDITChangeName.txt
@echo v>> ATTEDITChangeName.txt
@echo c>> ATTEDITChangeName.txt
@echo B209>> ATTEDITChangeName.txt
@echo B211>> ATTEDITChangeName.txt
@echo Next>> ATTEDITChangeName.txt
pause
创建一个文本文件并用文本填充它。问题在于用于写入文本的行" B209 11.5 TON BRIDGE ELEC LAYOUT 1& 2"不写作。相反,它被反馈到屏幕上。
查看截图链接 http://gyazo.com/a97e6daaf4695b766659df426180c95b
我们尽可能地解决了这个问题,并发现只有当数字是单个数字并且前面和后面只有一个空格时才会发生t 。
例如: " 1A"会工作 " 11"会工作 " 1"会工作 " 1"将不工作 要求将文本读作" 1& 2"逐字。我们可以做些什么来实现这一目标?
答案 0 :(得分:3)
而不是指定每条线应该在每条线上的位置
(即@echo -ATTEDIT> ATTEDITChangeName.txt
),使用这种块形式的方法。它将解决您遇到的问题并稍微清理您的代码。
@echo off
> ATTEDITChangeName.txt (
@echo -ATTEDIT
@echo y
@echo 36x24bdr
@echo SUBTITLE
@echo B209 11.5 TON BRIDGE ELEC LAYOUT 1 ^& 2
@echo 612.9014,43.8533
@echo 618.5063,35.8628
@echo 109.9409,-6.7209
@echo.
@echo v
@echo c
@echo B209
@echo B211
@echo Next
)
pause
使用> ATTEDITChangeName.txt
(就像我在我的示例中所做的那样)将覆盖文件的当前内容,并将其替换为()中的内容。如果您希望简单地向文件添加文本,请使用>> ATTEDITChangeName.txt
。
虽然我不确定为什么会出现此问题,但上述代码格式将解决您的问题并将所有文本打印到文本文件中。
答案 1 :(得分:0)
术语2>>
表示Windows将重定向StdErr输出。为避免这种情况,请将重定向>>
移动到命令的前面,如下所示:
echo>>ATTEDITChangeName.txt B209 11.5 TON BRIDGE ELEC LAYOUT 1 ^& 2
我同意,当你第一次使用它时看起来有点奇怪,但它确实有效。