Board logo

标题: [文本处理] [已解决]求助批处理如何在for中正确使用xargs,谢谢 [打印本页]

作者: hfxiang    时间: 2022-8-24 19:43     标题: [已解决]求助批处理如何在for中正确使用xargs,谢谢

本帖最后由 hfxiang 于 2022-8-26 14:16 编辑

用到的第3方式具xargs64.exe,下载地址:http://bcn.bathome.net/tool/xargs64.exe

直接执行(是以下for指令想得到的结果分2行输出):
D:\test>echo;select disk 0;list partition|xargs64 -d";" -L1
select disk 0
list partition


用for执行(出现非想要的结果,合在1行输出):
D:\test>for /f "usebackq tokens=*" %a in (`echo;select disk 0;list partition^|xargs64 -d";" -L1`) do @echo;%a
select disk 0 list partition

求助用各位大神,如何用for执行指令后,得出分2行显示的结果(即直接执行的结果一致)
作者: Batcher    时间: 2022-8-25 09:13

有什么特殊需求必须使用xargs64吗?
  1. @echo off
  2. for /f "delims=" %%i in ('echo select disk 0^& echo list partition') do (
  3.     echo,%%i
  4. )
  5. pause
复制代码

作者: hfxiang    时间: 2022-8-25 09:42

回复 2# Batcher


   
谢谢。
由于Windows的echo无Linux中echo -e "\n" 输出回车的功能,想利用xargs分割echo参数用于管道,而不想用过渡文件的方式操作,同时防止参数过长而引发的报错。故探索xargs在Windows中的应用。当然可以用gun的echo移植到Windows的版本来解决问题。
作者: flashercs    时间: 2022-8-25 14:58

  1. for /f "delims=" %a in ('powershell "'select disk 0';'list partition';'select part 1'"') do @echo %a
复制代码

作者: flashercs    时间: 2022-8-25 15:42

  1. for /f "usebackq tokens=*" %a in (`echo;select disk 0^;list partition^|xargs64 -d";" -L1`) do @echo;%a
复制代码

作者: flashercs    时间: 2022-8-25 15:42

  1. for /f "usebackq tokens=*" %a in (`echo;select disk 0^;list partition^|xargs64 -d";" -L1`) do @echo;%a
复制代码

作者: hfxiang    时间: 2022-8-25 15:58

回复 4# flashercs

谢谢
测试了4、5、6楼的方式,发现4楼的是可行的,但不是针对xargs的。
作者: aloha20200628    时间: 2022-8-26 11:45

批处理中的字符串被插入换行符之后,echo 和 for...() 是如何摆弄他们的...
  1. @echo off &setlocal enabledelayedexpansion
  2. set "strline=我们 本来 都在 同一行"
  3. set strLines=!strLine: =^
  4. !
  5. ::以上两行不能被省略
  6. echo,【!strLines!】
  7. ::下式示范》被插入换行符的字符串在循环表达式中相当于从文件中读取有换行符的文本行(其中不能再有, ;等默认分隔符)
  8. for %%s in (!strLines!) do echo,%%s
  9. ::下式利用 for...() 条件表达式的默认分隔符(, ;)可达到相同效果
  10. for %%s in (我们,本来 都在;同一行) do echo,%%s
  11. endlocal&pause&exit/b
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2