[英]Trying to print to a file with batch files
我试图将其打印到test.txt
,但是它只是说“ ECHO is on.
ping -n 1 <the ip doesn't matter>
if errorlevel 0 (
@echo 4>> test.txt
)
在批处理文件中,有10个流,编号从0到9。stdin是流0,stdout是流1,stderr是流2。3到9的流可满足您的需要。
您可以使用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
这样,您尝试将第4个流重定向到文件。
尝试这个:
ping -n 1 <the ip doesn't matter>
if errorlevel 0 (
(@echo 4)>> test.txt
)
直接在重定向器之前的数字将重定向(数字)流,因此4>
会将流4重定向。这会将命令保留为echo
,它将报告当前echo
状态(打开/关闭)。
解决此问题的经典语法mod是
>>test.txt echo 4
(尽管可以实现其他构造)
您的代码的另一个问题是
if errorlevel 0 (
那么, 有地方罕见的情况下errorlevel
可以设置为负数,但在正常情况下, errorlevel
为0或大于0。
if errorlevel n
语句被解释为“如果errorlevel为n 或大于n ”。
因此,您的if errorlevel 0
将始终为true。
仅当errorlevel
为0时,才可以使用if %errorlevel%==0
(或if %errorlevel% EQU 0
等价于if %errorlevel% EQU 0
)来触发真实条件,但是if
在for
循环中使用if,则此操作将失败。 这也可以解决,但是如果我要解决这个问题及其后果,我们离这个问题太远了。
也许最好的方法是使用if not errorlevel 1
,如果`ErrorLevel被OT 1或greaer比1,这将是真实的; 即。 er,0-出于所有意图和目的...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.