[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

小弟想用 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%"     →成功   
复制代码
请问为什么?

看来楼主不是一般的不懂啊?
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
复制代码
只是你这样作,若文件太多的话,变量的结果会很长,不如将你的最终目的说出来,大家帮你想想办法?
技术问题请到论坛发帖求助!

TOP

这就要用到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
复制代码
***共同提高***

TOP

我晕,发了才知道随风兄已经回复了,呵呵。
***共同提高***

TOP

恩 谢谢楼上大大的回覆
小弟知道"指令" 和 "变量" 的差别
我也一直不知道"指令"该怎么宣告
因为小弟看到一个范例用到 %date%
而小弟记得 date 是 指令  不是  变量

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

不过为啥 %date%可用
却又 环境变数date未定义?

TOP


小弟知道了
输入 set /?
最底部  有说明上述情形

TOP

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

  而 set 字符串 的格式,其功能是:在当前变量空间中,查找所有以字符串打头的那些变量,并把变量名和变量值罗列出来。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

set 字符串 的格式,其功能是:在当前变量空间中,查找所有以字符串打头的那些变量,并把变量名和变量值罗列出来。

而且显示的结果是经过排序(ASCII)的,利用这一特性,可以实现一些很酷的效果。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

为什么还要"call”?我试了下,不"call"也可以呀! 还有batman的怎么还有一个“,”空格就可以了吧?
请高手指点,先谢谢啦!
for /f "delims=" %%a in ('dir/b') do call set dir_list=%%dir_list%% %%a

TOP

返回列表