标题: [新方法]批处理中把命令的结果赋值给变量 [打印本页]
作者: broly 时间: 2011-1-2 22:35 标题: [新方法]批处理中把命令的结果赋值给变量
[新方法]命令的结果复制给变量
看完下面的,请再看5楼
以前返回命令的结果,赋值给另外一个变量时,比较常用的方法是dir /b,比如:
当你想返回 dir /b 的结果,你可以这样- for /f "delims=" %%i in ('dir /b') do set str=%%i
复制代码
但是最近想到一个新方法(不知道有没有人用过),比如你同样返回 for /f- @echo off
- set str=str
- set "str=%str:str=>nul & dir/b%"
- echo %str%
- pause>nul
复制代码
大家可以试试效果。
返回的 %str% 是你在CMD下用 dir /b 的显示的结果。
这种方法的优点有:
一、代码比较简单。
二、可以多行赋值给一个变量(即包含了换行回车符)。
注意:第三行的- 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
顶一下,另外参照你的写一个- @echo off&setlocal enabledelayedexpansion
- set a=
- set b=avs
- set b=!b:avs=%a%^|dir/b!
- echo %b%
- pause
复制代码
作者: 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%
- echo %a%
- pause
- setlocal enabledelayedexpansion
- echo !a!
- pause
- set a
- pause
复制代码
实际上的原理是,预处理的时候将echo %a%扩展成了echo >nul&dir /b,因此自然就显示出了dir /b命令的结果。从本质上看,这跟下面代码没什么区别- @echo off
- set "a=dir /b"
- %a%
- 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 |