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

[文本处理] [已解决]批处理如何将指令输出结果设为%变数%?

[复制链接]
发表于 2009-2-11 18:35:04 | 显示全部楼层 |阅读模式
小弟想用 dir /b 的输出结果(列出文件夹内所有档案)
设为一变数%dir_list%

然后对此变数进行处理

例如 在某文件夹内 有 1.txt , 2.jpg , 3.mp3  3个档案

使用 dir /b 指令 将会输出

  1. 1.txt
  2. 2.jpg
  3. 3.mp3
复制代码
小弟希望能够将此变数设为

  1. dir_list=1.txt 2.jpg 3.mp3
复制代码
可是我怎么试都不成功

  1. set "dir_list=%dir /b%"    →不成功
  2. set "dir_list=%dir%"        →不成功
  3. 但是
  4. set "today =%date%"     →成功   
复制代码
请问为什么?
发表于 2009-2-11 18:58:25 | 显示全部楼层
看来楼主不是一般的不懂啊?
dir 是个命令,而不是变量,你这样当然是不成功的了,而 date 是一个系统变量,所以成功。
  1. @echo off
  2. for /f "delims=" %%a in ('dir/b') do call set dir_list=%%dir_list%% %%a
  3. echo %dir_list%
  4. pause
复制代码
只是你这样作,若文件太多的话,变量的结果会很长,不如将你的最终目的说出来,大家帮你想想办法?
发表于 2009-2-11 19:02:40 | 显示全部楼层
这就要用到for的遍历机制了:
  1. @echo off
  2. for /f "delims=" %%a in ('dir /s /b') do call,set "dir_list=%%dir_list%% %%~nxa"
  3. echo %dir_list%&pause>nul
复制代码
发表于 2009-2-11 19:04:06 | 显示全部楼层
我晕,发了才知道随风兄已经回复了,呵呵。
 楼主| 发表于 2009-2-11 20:59:28 | 显示全部楼层
恩 谢谢楼上大大的回覆
小弟知道"指令" 和 "变量" 的差别
我也一直不知道"指令"该怎么宣告
因为小弟看到一个范例用到 %date%
而小弟记得 date 是 指令  不是  变量

因此 小弟就实际去cmd里  输入 set date  
结果显示  环境变数date未定义
因此小弟就一直以为 %% 除了用在变量外,也能用在指令     @_@"

不过为啥 %date%可用
却又 环境变数date未定义?
 楼主| 发表于 2009-2-12 12:09:02 | 显示全部楼层

小弟知道了
输入 set /?
最底部  有说明上述情形
发表于 2009-2-12 13:36:47 | 显示全部楼层
  从变量的存活期来看,变量可分两种:
  一种是永久性变量,是系统已经定义好了的,也称为环境变量,在CMD窗口中输入 set 命令,可以看到有很多形如“SystemRoot=C:\WINDOWS”之类的信息,其中,等号前面的部分就是环境变量,等号后面的是环境变量的具体值;这些变量都可以直接引用而无需再由用户定义;当然,set 罗列出来的系统变量只是一部分,还有一部分变量引用可以通过 set /? 查到,比如我们常用的%cd%、%date%、%time%,这些变量引用很有趣:脱掉马甲(百分号对),它们就是命令;套上百分号对,它们可以直接作为变量加以引用。
  另一种就是临时性变量,通过 set 变量名=变量值 的格式来指定,如 set str=abc,其中,str是临时变量的名,abc是临时变量的值。

  而 set 字符串 的格式,其功能是:在当前变量空间中,查找所有以字符串打头的那些变量,并把变量名和变量值罗列出来。
发表于 2009-2-12 20:33:46 | 显示全部楼层
set 字符串 的格式,其功能是:在当前变量空间中,查找所有以字符串打头的那些变量,并把变量名和变量值罗列出来。

而且显示的结果是经过排序(ASCII)的,利用这一特性,可以实现一些很酷的效果。
发表于 2012-12-27 11:54:53 | 显示全部楼层
为什么还要"call”?我试了下,不"call"也可以呀! 还有batman的怎么还有一个“,”空格就可以了吧?
请高手指点,先谢谢啦!
for /f "delims=" %%a in ('dir/b') do call set dir_list=%%dir_list%% %%a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 20:33 , Processed in 0.019767 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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