返回列表 发帖

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

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

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

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

TOP

curl "https://xxxx.com/" >> "test.txt" & >> "test.txt" echo.COPY
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 关闭下载进程报告信息...
(curl "https://xxxx.com/" &echo,)>"test.txt" 2>nulCOPY

TOP

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

TOP

返回列表