[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】批处理连续执行代码的问题,为什么会失败?

本帖最后由 aceamuro 于 2025-3-20 07:02 编辑

为什么写成
  1. curl "https://xxxx.com/" | echo. >> "test.txt"
复制代码
  1. curl "https://xxxx.com/" >> "test.txt" && echo. >> "test.txt"
复制代码
都会写入失败,只有老老实实写成这样下面这样两行的形式才会成功?
  1. curl "https://xxxx.com/" >> "test.txt"
  2. echo.>> "test.txt"
复制代码
请问最上面的两种写法错在哪里?

管道符(|)会导致命令并行执行,数据可能丢失或重定向失效。
逻辑运算符(&&)的重定向操作可能因文件描述符冲突失败。
分步执行是最安全的方式,因为它避免了并发操作文件的竞争条件。

TOP

  1. curl "https://xxxx.com/" >> "test.txt" & >> "test.txt" echo.
复制代码
bat小白,请多指教!谢谢!

TOP

回复 3# 77七
的确可以运行,好像很多代码都是这样,正写运行不正常的倒着写有时候就能运行,请问这是什么原理?
另外这个代码运行后会自动打开test.txt,为什么?能不能避免?

TOP

管道符(|)会导致命令并行执行,数据可能丢失或重定向失效。
逻辑运算符(&&)的重定向操作可能因文件描述 ...
smss 发表于 2025-3-18 10:44

呃……有点没明白,并行执行的意思,是说那种需要运行一段时间的代码都没法用(|)吗?
另外&&不是组合命令符吗?没查到跟逻辑运算有关的内容,求具体资料……

TOP

老老实实写成2行

TOP

本帖最后由 aloha20200628 于 2025-3-19 12:20 编辑

回复 1# aceamuro

一楼第一段代码采用管道输出下载数据流没有错,而采用echo作为接收者才是错误,因其没有读取/输入功能,因此上游经管道传送的数据流至此被截止。
一楼第二段代码采用&&链接符应该不会影响下载数据流输出到 test.txt,而 && 链接符起效的条件是上游的成功退出码为零,因此如 curl 出现下载错误就会导致其后的操作可能失效。
假设 curl 下载成功,可用以下代码试试,其中 2>nul 关闭下载进程报告信息...
  1. (curl "https://xxxx.com/" &echo,)>"test.txt" 2>nul
复制代码

TOP

回复 7# aloha20200628
还真是可以的,感谢详细解说。

TOP

返回列表