找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 9438|回复: 7

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

[复制链接]
发表于 2025-3-18 09:55:29 | 显示全部楼层 |阅读模式
本帖最后由 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"
复制代码
请问最上面的两种写法错在哪里?
发表于 2025-3-18 10:44:50 | 显示全部楼层
管道符(|)会导致命令并行执行,数据可能丢失或重定向失效。
逻辑运算符(&&)的重定向操作可能因文件描述符冲突失败。
分步执行是最安全的方式,因为它避免了并发操作文件的竞争条件。
发表于 2025-3-18 11:42:24 | 显示全部楼层
  1. curl "https://xxxx.com/" >> "test.txt" & >> "test.txt" echo.
复制代码
 楼主| 发表于 2025-3-18 22:13:08 | 显示全部楼层
回复 3# 77七
的确可以运行,好像很多代码都是这样,正写运行不正常的倒着写有时候就能运行,请问这是什么原理?
另外这个代码运行后会自动打开test.txt,为什么?能不能避免?
 楼主| 发表于 2025-3-18 22:24:07 | 显示全部楼层
管道符(|)会导致命令并行执行,数据可能丢失或重定向失效。
逻辑运算符(&&)的重定向操作可能因文件描述 ...
smss 发表于 2025-3-18 10:44

呃……有点没明白,并行执行的意思,是说那种需要运行一段时间的代码都没法用(|)吗?
另外&&不是组合命令符吗?没查到跟逻辑运算有关的内容,求具体资料……
发表于 2025-3-19 00:04:19 | 显示全部楼层
老老实实写成2行
发表于 2025-3-19 12:16:09 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2025-3-20 07:01:43 | 显示全部楼层
回复 7# aloha20200628
还真是可以的,感谢详细解说。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:29 , Processed in 0.027381 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表