尝试使用批处理文件打印到文件

时间:2014-09-01 19:38:52

标签: file batch-file printing

我正在尝试将其打印到test.txt,但它只是说“ECHO is on.

ping -n 1 <the ip doesn't matter>
 if errorlevel 0 (
@echo 4>> test.txt
)

3 个答案:

答案 0 :(得分:1)

在批处理文件中有10个流,编号从0到9.stdin是流0,stdout是流1,stderr是流2.从3到9的流可用于你需要的。

您可以将一个strem重定向到从n<file的文件中读取,其中n是用于检索文件中数据的流编号。

此外,可以使用流来写入文件。在这种情况下,n>file表示写入流n的数据应写入指定的文件

您的代码存在的问题是

@echo 4>>test.txt

echo with no parameters to stdout stream (default output stream) while the data sent to stream 4 should be appended to test.txt

这是一个通常的问题,数据回显重定向,以数字结尾。您可以避免更改命令中的顺序以在命令之前放置重定向。

>>test.txt @echo 4

答案 1 :(得分:0)

通过这种方式,您尝试将第4个流重定向到文件。

试试这个:

ping -n 1 <the ip doesn't matter>
 if errorlevel 0 (
 (@echo 4)>> test.txt
)

答案 2 :(得分:0)

重定向器之前的数字重定向(数字)流,因此4>重定向流4.这使得命令echo将报告当前echo状态(打开开/关)。

解决此问题的经典语法mod是

>>test.txt echo 4

(虽然可以实施其他结构)

您的代码的另一个问题是

if errorlevel 0 (

嗯,罕见的情况,errorlevel可以设置为负数,但在正常情况下,errorlevel将为0或大于0。

if errorlevel n语句被解释为&#34;如果errorlevel是 n 大于 n &#34;

因此,您的if errorlevel 0将永远为真。

您可以使用if %errorlevel%==0(或等效的if %errorlevel% EQU 0仅在errorlevel 0 时触发真实条件 - 但如果您是在if循环中使用for。这也有一个治愈方法,但是如果我进入修复及其后果,我们就会离得太远。

可能最好的方法是使用if not errorlevel 1,如果`errorlevel ot 1或者greaer比1,则为真;即。呃,0 - 所有意图和目的......