标题: [文本处理] [已解决]批处理如何将指令输出结果设为%变数%? [打印本页]
作者: strong12345 时间: 2009-2-11 18:35 标题: [已解决]批处理如何将指令输出结果设为%变数%?
小弟想用 dir /b 的输出结果(列出文件夹内所有档案)
设为一变数%dir_list%
然后对此变数进行处理
例如 在某文件夹内 有 1.txt , 2.jpg , 3.mp3 3个档案
使用 dir /b 指令 将会输出复制代码
小弟希望能够将此变数设为- dir_list=1.txt 2.jpg 3.mp3
复制代码
可是我怎么试都不成功- set "dir_list=%dir /b%" →不成功
- set "dir_list=%dir%" →不成功
- 但是
- set "today =%date%" →成功
复制代码
请问为什么?
作者: 随风 时间: 2009-2-11 18:58
看来楼主不是一般的不懂啊?
dir 是个命令,而不是变量,你这样当然是不成功的了,而 date 是一个系统变量,所以成功。- @echo off
- for /f "delims=" %%a in ('dir/b') do call set dir_list=%%dir_list%% %%a
- echo %dir_list%
- pause
复制代码
只是你这样作,若文件太多的话,变量的结果会很长,不如将你的最终目的说出来,大家帮你想想办法?
作者: batman 时间: 2009-2-11 19:02
这就要用到for的遍历机制了:- @echo off
- for /f "delims=" %%a in ('dir /s /b') do call,set "dir_list=%%dir_list%% %%~nxa"
- echo %dir_list%&pause>nul
复制代码
作者: batman 时间: 2009-2-11 19:04
我晕,发了才知道随风兄已经回复了,呵呵。
作者: strong12345 时间: 2009-2-11 20:59
恩 谢谢楼上大大的回覆
小弟知道"指令" 和 "变量" 的差别
我也一直不知道"指令"该怎么宣告
因为小弟看到一个范例用到 %date%
而小弟记得 date 是 指令 不是 变量
因此 小弟就实际去cmd里 输入 set date
结果显示 环境变数date未定义
因此小弟就一直以为 %% 除了用在变量外,也能用在指令 @_@"
不过为啥 %date%可用
却又 环境变数date未定义?
作者: strong12345 时间: 2009-2-12 12:09
喔
小弟知道了
输入 set /?
最底部 有说明上述情形
作者: namejm 时间: 2009-2-12 13:36
从变量的存活期来看,变量可分两种:
一种是永久性变量,是系统已经定义好了的,也称为环境变量,在CMD窗口中输入 set 命令,可以看到有很多形如“SystemRoot=C:\WINDOWS”之类的信息,其中,等号前面的部分就是环境变量,等号后面的是环境变量的具体值;这些变量都可以直接引用而无需再由用户定义;当然,set 罗列出来的系统变量只是一部分,还有一部分变量引用可以通过 set /? 查到,比如我们常用的%cd%、%date%、%time%,这些变量引用很有趣:脱掉马甲(百分号对),它们就是命令;套上百分号对,它们可以直接作为变量加以引用。
另一种就是临时性变量,通过 set 变量名=变量值 的格式来指定,如 set str=abc,其中,str是临时变量的名,abc是临时变量的值。
而 set 字符串 的格式,其功能是:在当前变量空间中,查找所有以字符串打头的那些变量,并把变量名和变量值罗列出来。
作者: Batcher 时间: 2009-2-12 20:33
而 set 字符串 的格式,其功能是:在当前变量空间中,查找所有以字符串打头的那些变量,并把变量名和变量值罗列出来。
而且显示的结果是经过排序(ASCII)的,利用这一特性,可以实现一些很酷的效果。
作者: dxwi 时间: 2012-12-27 11:54
为什么还要"call”?我试了下,不"call"也可以呀! 还有batman的怎么还有一个“,”空格就可以了吧?
请高手指点,先谢谢啦!
for /f "delims=" %%a in ('dir/b') do call set dir_list=%%dir_list%% %%a
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |