繁体   English   中英

尝试打印到带有批处理文件的文件

[英]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。

仅当errorlevel0时,才可以使用if %errorlevel%==0 (或if %errorlevel% EQU 0等价于if %errorlevel% EQU 0 )来触发真实条件,但是iffor循环中使用if,则此操作将失败。 这也可以解决,但是如果我要解决这个问题及其后果,我们离这个问题太远了。

也许最好的方法是使用if not errorlevel 1 ,如果`ErrorLevel被OT 1或greaer比1,这将是真实的; 即。 er,0-出于所有意图和目的...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM