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

[分享]批处理利用set /p与重定向输入分行获取文本内容

[复制链接]
发表于 2011-11-9 21:18:43 | 显示全部楼层
回复 31# DAIC


    我觉得你发错地方了~
发表于 2012-3-20 10:56:25 | 显示全部楼层

在文本某行中插入字符(支持任意字符,保留空行)

本帖最后由 tkaven 于 2012-3-20 18:26 编辑

  1. @echo off&color a&setlocal enabledelayedexpansion
  2. ::用法 call :insert "要修改的本文文档路径" "在哪一行下面插入文字" "所要插入的文字"
  3. call :insert "C:\Users\Administrator\Desktop\新建 Text Document.txt" "5" "我好喜欢你啊,哈哈哈"
  4. endlocal
  5. echo 操作完成,按任意键退出&pause>nul
  6. exit

  7. :insert
  8. FOR /F %%l in ('find /c /v ""^< %1') do (
  9.         for /l %%a in (1 1 %%l) do (
  10.                 set /p str=
  11.                 set /a 当前行=当前行+1
  12.                 if !当前行! GTR %~2 (
  13.                         echo.!str!
  14.                         ) else (
  15.                         if !当前行! EQU %~2 (echo.!str!&echo.%~3) else (echo.!str!)
  16.                 )
  17.                 set str=
  18.         )
  19. )< %1 >> "%~d1%~p1%~n1_已处理%~x1"
  20. goto :eof
复制代码
发表于 2017-2-26 05:39:23 | 显示全部楼层
问:
  1. dir | set /p v=0
复制代码
这句是不能达到获取命令输出首行文字的目的的。读了楼主的分析,估计是因为只有cr没有lf的缘故,如何通过命令补一个lf让set /p捕获前文输出呢?
 楼主| 发表于 2017-2-26 16:53:16 | 显示全部楼层
回复 33# liero1982


与换行符无关,是父进程不能获取子进程变量环境的原因,解释如下:

这样实际上是可以获取到的:
  1. dir | set /p VAR=^& set VAR
  2. ::此处已经捕获变量
  3. pause

  4. set VAR
  5. ::此处变量消失
  6. pause
复制代码
为什么会有这种现象,是因为管道是前后两个进程通信,cmd 如果发现前后的语句是内部命令(或用 & | && || 连接的代码块),就会启动一个 cmd 去执行这一部分
所以上面的代码相当于:
  1. cmd /c dir | cmd /c "set /p VAR=& set VAR"
复制代码
也就是说,VAR 变量是在被管道启动的子进程 cmd.exe 中赋值的,只在子进程中有效,当前运行的父进程 cmd.exe 是获取不到的

评分

参与人数 1技术 +1 收起 理由
liero1982 + 1 get!

查看全部评分

发表于 2017-2-27 00:01:57 | 显示全部楼层
回复 34# CrLf


    谢谢,受教了;那按照这个思路,是不是就真没办法用一条简单的语句实现命令输出到变量(我现在只知道用 临时文件 或者用 for /f)
 楼主| 发表于 2017-2-28 22:17:16 | 显示全部楼层
回复 35# liero1982


    可以试试 conset、CSet、seti 之类的第三方工具,除此之外没有简洁的办法了
发表于 2017-2-28 22:19:42 | 显示全部楼层
回复 35# liero1982


    可以学习并使用PowerShell用它来取代BAT
发表于 2022-6-7 21:35:24 | 显示全部楼层
空设备真的是空的吗
pause<nul
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 21:43 , Processed in 0.020530 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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