我正在尝试将其打印到test.txt
,但它只是说“ECHO is on.
”
ping -n 1 <the ip doesn't matter>
if errorlevel 0 (
@echo 4>> test.txt
)
答案 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 - 所有意图和目的......