Board logo

标题: [新方法]批处理中把命令的结果赋值给变量 [打印本页]

作者: broly    时间: 2011-1-2 22:35     标题: [新方法]批处理中把命令的结果赋值给变量

[新方法]命令的结果复制给变量
看完下面的,请再看5楼
以前返回命令的结果,赋值给另外一个变量时,比较常用的方法是dir /b,比如:
当你想返回 dir /b 的结果,你可以这样
  1. for /f "delims=" %%i in ('dir /b') do set str=%%i
复制代码
但是最近想到一个新方法(不知道有没有人用过),比如你同样返回 for /f
  1. @echo off
  2. set str=str
  3. set "str=%str:str=>nul & dir/b%"
  4. echo %str%
  5. pause>nul
复制代码
大家可以试试效果。
返回的 %str% 是你在CMD下用 dir /b 的显示的结果。
这种方法的优点有:
  一、代码比较简单。
  二、可以多行赋值给一个变量(即包含了换行回车符)。

注意:第三行的
  1. set "str=%str:str=>nul & dir/b%"
复制代码
这里的双引号很关键,缺少的话是赋值不成功的

[ 本帖最后由 broly 于 2011-1-3 08:22 编辑 ]
作者: powerbat    时间: 2011-1-2 22:58

早已不新鲜了。但对钻研精神赞一个!
以前VBT论坛有一些(关于预处理的话题引出来的),本论坛net版主也经常使用这种方式定义变量函数。

if "%str%"=="a.txt" 怎么办呢?
作者: broly    时间: 2011-1-2 23:13     标题: 回复 2楼 的帖子

本论坛net版主也经常使用这种方式定义变量函数?
这个就不太清楚了。
没有绝对要这样用法的,只是方法的一种。具体还是要按实际情况来选择最好的方法
作者: wc726842270    时间: 2011-1-3 00:58

顶一下,另外参照你的写一个
  1. @echo off&setlocal enabledelayedexpansion
  2. set a=
  3. set b=avs
  4. set b=!b:avs=%a%^|dir/b!
  5. echo %b%
  6. pause
复制代码

作者: defanive    时间: 2011-1-3 01:40

其实还可以更简单一点
  1. @echo off
  2. set "a=>nul&dir /b"
  3. echo %a%
  4. pause
复制代码
实际上,并没有把值赋给了变量a
变量a实际的值是>nul&dir /b
打开变量延迟或者使用set a就可以看到
  1. @echo off
  2. set a=%a:^>nul^&dir /b%
  3. echo %a%
  4. pause
  5. setlocal enabledelayedexpansion
  6. echo !a!
  7. pause
  8. set a
  9. pause
复制代码
实际上的原理是,预处理的时候将echo %a%扩展成了echo >nul&dir /b,因此自然就显示出了dir /b命令的结果。从本质上看,这跟下面代码没什么区别
  1. @echo off
  2. set "a=dir /b"
  3. %a%
  4. pause
复制代码

作者: broly    时间: 2011-1-3 08:21

原帖由 defanive 于 2011-1-3 01:40 发表
其实还可以更简单一点@echo off
set "a=>nul&dir /b"
echo %a%
pause实际上,并没有把值赋给了变量a
变量a实际的值是>nul&dir /b
打开变量延迟或者使用set a就可以看到@echo off
set a=%a:^>nul^&dir /b%
ech ...

听了此楼的解释,了解到情况了,的确是这样。看来这次失误了。
呵呵,自以为找到一种新的方法,想不到不过如此,真可笑…
此贴有误,望看到此贴的人引以为戒!
o(︶︿︶)o

[ 本帖最后由 broly 于 2011-1-3 08:47 编辑 ]
作者: powerbat    时间: 2011-1-3 12:42

原来楼主还没有掌握预处理啊?所以你以为这是新方法?
作者: tiandyoin    时间: 2023-2-24 16:25

@echo off && rem 直接将命令结果赋值给变量的简单方法
set/p a= |time/t
echo %a%
pause>nul

网上找的方法,但测试并没有得到值?是哪里出问题了
作者: tiandyoin    时间: 2023-2-24 16:38

回复 8# tiandyoin


    可能是这样吧
set "a=|time/t"
echo %a%




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