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

[文本处理] [已解决]批处理find命令的输出能不能直接用set定义成/赋值给变量?

本帖最后由 pcl_test 于 2016-7-16 15:05 编辑

我想在600050.txt文件中筛选出字符串,想利用find显示出来的set定义在一个变量上。
我知道for可以做到
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (sort 600050.txt | find  "☆曾用名")>%temp%/1.txt
  4. for /f "delims=" %%i in (%temp%/1.txt) do set a=%%i
  5. echo !a:~0,-5!
复制代码
如果不用for命令能不能直接set定义
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. sort 600050.txt | find  "☆曾用名" |set /p a=
  4. echo  !a:~0,-5!
复制代码
上面这段代码有问题,小弟实在是想不出来了。    想求各位帮忙想想。
莫求昨天无悔,但愿今日无愧。

不能这样滴

TOP

回复 2# powerbat


我想有个解释。   或许用某种方法可以,但除了for
莫求昨天无悔,但愿今日无愧。

TOP

Windows下只有这种方法,不需要解释。
Linux下就没有这种方法了,是其他方式,比如var1=`dir`

TOP

回复 4# powerbat

不是吧!  我再等等答案吧。
莫求昨天无悔,但愿今日无愧。

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (sort 600050.txt | find  "☆曾用名")>%temp%/1.txt
  4. set /p a=<%temp%/1.txt
  5. echo !a:~0,-5!
复制代码

TOP

回复 6# awk


非常感谢。  又多了一个参考,我认为能不能实现把代码一行就解决了。
不行就算了    我也觉得太勉强了。
莫求昨天无悔,但愿今日无愧。

TOP

除了从文件获取就只有for了,不明白你那个 sort 有什么用
  1. @echo off
  2. for /f "delims=" %%i in ('find "☆曾用名" 600050.txt') do set a=%%i
  3. pause
复制代码

TOP

用临时文件?得不偿失。
用sort可能是有多个结果,想进行排序。

TOP

回复 9# powerbat

那要看楼主的需求是什么了,如果速度优先,使用临时文件无疑更合适。而且 for /f 其实也不绿色,直接解析命令输出的代价是要开启额外的 cmd 进程,也就是执行了一个 cmd /c。

TOP

至于 echo something|set /p str= 的这种做法至今未见成功的实例,原因不明。

TOP

用临时文件速度就很快吗?创建进程与写磁盘,哪种效率高?我没有测试过。
有些情况下是创建不了临时文件的,所以直接解析命令输出更通用一些。

TOP

回复 11# CrLf


verybat关闭前一段时间我在zqz0012005版主的一个讨论管道机制的帖子中看到过:
  1. echo hello|set /p var=
  2. 其实就是
  3. echo hello|cmd /S /D /c"set /p var="
  4. echo hello|cmd /v /c "set /p var=&echo !var!"
复制代码
变量var是属于子进程的,外面的父进程cmd访问不到。(而且子进程很快退出)
3

评分人数

TOP

本帖最后由 guaiwu 于 2011-10-18 19:30 编辑

回复 8# FOR


正如more一样  只是想将查找到的字符串输出,用find筛选一遍,最后将字符转存进a里面。   
就像楼下有人说的
  1. echo xinwenjian | set /p a=
复制代码
一样。想找个理由。


很感谢参与了。
莫求昨天无悔,但愿今日无愧。

TOP

回复 13# powerbat


感谢回复了
根据所提供的的
echo hello|set /p var=
其实就是
echo hello|cmd /S /D /c"set /p var="

echo hello|cmd /v /c "set /p var=&echo !var



我应用到题目里去
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. sort 600050.txt | find  "☆曾用名" |cmd /v /c "set /p var="
  4. echo %var%
  5. pause
复制代码
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. type 600050.txt | find  "☆曾用名" | cmd /v /c "set /p var="&echo !var!
  4. pause
复制代码
已经将sort改成type输出文本内容。  可结果还是一样。
莫求昨天无悔,但愿今日无愧。

TOP

返回列表