Board logo

标题: [文件操作] 求助批处理for中的set参数定义所有子文件夹? [打印本页]

作者: Wingl83    时间: 2009-3-13 20:48     标题: 求助批处理for中的set参数定义所有子文件夹?

参考了xp自带的命令行参考

set 参数可以代表单个或多个文件组。可以使用通配符(即,* 和 ?)指定文件组。以下为有效文件组:
(*.doc)
(*.doc *.txt *.me)
(jan*.doc jan*.rpt feb*.doc feb*.rpt)
(ar??1991.* ap??1991.*)
在使用 for 命令时,set 中的第一个值代替 %variable%%variable,然后由指定的命令处理该值。这一直会继续下去,直到处理完与 set 值相对应的所有文件(或文件组)为止。

若我想用set定义此文件夹下所有的子文件夹,应该怎样定义?
作者: 小勇12    时间: 2009-3-13 21:04

不知道利用dir /s /a:d 可以否
只是自己要处理两个特殊文件夹
. 当前目录
..  父目录
您可以用 FOR /F 命令来分析命令的输出,利用判断语句即可完成去掉两个特殊文件夹
作者: Batcher    时间: 2009-3-13 21:23

你看的是哪个教程?

这里的set不是指set命令,而是指集合。也就是说for ... in (...) do ... 语句中的括号里面是一个集合。当使用通配符的时候,自然可以表示“单个或多个文件组”。

“此文件夹下所有的子文件夹”可以这样定义:
  1. for /f "delims=" %%a in ('dir /s /b /ad') do (
  2.   echo %%a
  3. )
复制代码

作者: Wingl83    时间: 2009-3-13 22:15     标题: 回复 3楼 的帖子

我参考的是系统自带的命令行参考
  1. start c:\windows\hh ntcmds.chm
复制代码
其实是老师要求我们把在校做的练习拷回家,以保存自己的操作进度。我的思路是这样的:在父文件夹下新建学生文件夹(多个),运行该批处理即可在这些文件夹下新建一个以当前日期(不是系统日期)为名称的文件夹。以下的批处理为什么不能实现呢?
  1. @echo off
  2. color 0f
  3. echo.           
  4. echo.
  5. set /p mouth=           请输入月份:
  6. echo.           
  7. echo.
  8. set /p day=           请输入日期:
  9. set dir=%mouth%-%day%
  10. md %dir%
  11. for /f "delims=" %%a in ('dir /s /b /ad') do (copy "%dir%" "%%a")
  12. pause
复制代码

作者: Batcher    时间: 2009-3-13 22:25

系统自带的命令行参考简直是误人子弟,建议参考本论坛教程:http://bbs.bathome.net/thread-2189-1-1.html

你把@echo off删除,看看执行过程就明白了。
作者: zqz0012005    时间: 2009-3-13 22:42

for /?
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

    检查以 [drive:]path 为根的目录树,指向每个目录中的
    FOR 语句。如果在 /R 后没有指定目录,则使用当前
    目录。如果集仅为一个单点(.)字符,则枚举该目录树。

蓝色部分其实就是遍历所有子文件夹的意思。
显示的结果是文件夹后面多了\.,它基本与文件夹等价。
dir C:\windows
dir C:\windows\.
dir C:\windows\.\.\.\.\.\.\.\.\.\.\.
原理参见:
批处理常用符号详解
http://www.bathome.net/viewthread.php?tid=1205




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2