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


如目前不考虑效率,只求能在一行完成此命令呢。

呵呵!劳心了。
莫求昨天无悔,但愿今日无愧。

TOP

回复 16# guaiwu


这样算一行吗?
  1. @echo off & setlocal enabledelayedexpansion & (sort 600050.txt | find  "☆曾用名")>%temp%/1.txt & set /p a=<%temp%/1.txt & echo !a:~0,-5!
复制代码

TOP

回复 13# powerbat


    精彩!我倒是知道管道前后存在内部命令或语块时会开启新的 cmd 环境,但是忽略了这个 cmd 是子进程,它继承但并不与父进程共享变量环境。
   如此一来,这个谜题终于有了最合理的解释...又谈到 verybat,照例干号一下,为什么我学批不早两年啊~

TOP

回复 16# guaiwu


    不是已经有人给了吗?像 powerbat 说的那样在子进程中赋值、在子进程中调用就可以呀:
  1. find "☆曾用名" 600050.txt|cmd /v /c "set /p var=&echo !var!"
复制代码
或者 8 楼 for 的代码也可以啊,使用后有何处不符合要求呢?
   不过还是建议用 8 楼方案,毕竟 13 楼的技巧虽深刻,但此时并不合适。

TOP

回复 19# CrLf


按照你的代码,省略sort、more、type等命令那个去执行  小弟琢磨觉得有两个问题

第一,如果只用find "☆曾用名" 600050.txt 命令会在多一个不需要的 ---------- 11.TXTt这一段
第二,即使用了findstr命令,---------- 11.TXT解决了  但是
  1. setlocal enabledelayedexpansoin
  2. find "☆曾用名" 600050.txt | cmd /v /c "set /p var="&echo !var!
  3. pause
复制代码
一样出错。
echo 显示不了了!var!
莫求昨天无悔,但愿今日无愧。

TOP

本帖最后由 CrLf 于 2011-10-18 23:23 编辑

回复 20# guaiwu


    那是因为你的 set /p 与 echo !var! 不在同一个进程中,先执行 【find "☆曾用名" 600050.txt | cmd /v /c "set /p var="】成功赋值,然后退出子进程后才执行 echo !var!,而此时已经是在父进程中了,子进程的变量环境随着子进程的结束已经随之销毁,当然取不到。而且你开了变量延迟又没有把 !var! 转义,要么先不要开变量延迟,要么就转义 !var!,修改如下:
  1. find "☆曾用名" 600050.txt | cmd /v /c "set /p var=&echo !var!"
  2. pause
复制代码
  1. setlocal enabledelayedexpansoin
  2. find "☆曾用名" 600050.txt | cmd /v /c "set /p var=&echo ^!var^!"
  3. pause
复制代码

TOP

13L的代码却实很精彩,
不过说实话,感觉进程这个词还是大了些。引号用的非常到位(给力)
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

回复 21# CrLf


如图显示  加上了延迟变量。还是不能显示!var!变量。
莫求昨天无悔,但愿今日无愧。

TOP

回复 22# wc726842270


为什么说进程这个词还是大了些?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表