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

[新方法]批处理中把命令的结果赋值给变量

[复制链接]
发表于 2011-1-2 22:35:26 | 显示全部楼层 |阅读模式
[新方法]命令的结果复制给变量
看完下面的,请再看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 编辑 ]

评分

参与人数 1技术 +1 收起 理由
随风 + 1 感谢分享

查看全部评分

发表于 2011-1-2 22:58:47 | 显示全部楼层
早已不新鲜了。但对钻研精神赞一个!
以前VBT论坛有一些(关于预处理的话题引出来的),本论坛net版主也经常使用这种方式定义变量函数。

if "%str%"=="a.txt" 怎么办呢?
 楼主| 发表于 2011-1-2 23:13:01 | 显示全部楼层

回复 2楼 的帖子

本论坛net版主也经常使用这种方式定义变量函数?
这个就不太清楚了。
没有绝对要这样用法的,只是方法的一种。具体还是要按实际情况来选择最好的方法
发表于 2011-1-3 00:58:54 | 显示全部楼层
顶一下,另外参照你的写一个
  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
复制代码

评分

参与人数 1技术 +1 收起 理由
broly + 1 创新

查看全部评分

发表于 2011-1-3 01:40:12 | 显示全部楼层
其实还可以更简单一点
  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
复制代码

评分

参与人数 1技术 +1 收起 理由
broly + 1 有理

查看全部评分

 楼主| 发表于 2011-1-3 08:21:09 | 显示全部楼层
原帖由 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 编辑 ]
发表于 2011-1-3 12:42:27 | 显示全部楼层
原来楼主还没有掌握预处理啊?所以你以为这是新方法?
发表于 2023-2-24 16:25:23 | 显示全部楼层
@echo off && rem 直接将命令结果赋值给变量的简单方法
set/p a= |time/t
echo %a%
pause>nul

网上找的方法,但测试并没有得到值?是哪里出问题了
发表于 2023-2-24 16:38:28 | 显示全部楼层
回复 8# tiandyoin


    可能是这样吧
set "a=|time/t"
echo %a%
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 05:09 , Processed in 0.021136 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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