标题: [文件操作] 求助批处理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 ... 语句中的括号里面是一个集合。当使用通配符的时候,自然可以表示“单个或多个文件组”。
“此文件夹下所有的子文件夹”可以这样定义:- for /f "delims=" %%a in ('dir /s /b /ad') do (
- echo %%a
- )
复制代码
作者: Wingl83 时间: 2009-3-13 22:15 标题: 回复 3楼 的帖子
我参考的是系统自带的命令行参考- start c:\windows\hh ntcmds.chm
复制代码
其实是老师要求我们把在校做的练习拷回家,以保存自己的操作进度。我的思路是这样的:在父文件夹下新建学生文件夹(多个),运行该批处理即可在这些文件夹下新建一个以当前日期(不是系统日期)为名称的文件夹。以下的批处理为什么不能实现呢?- @echo off
- color 0f
- echo.
- echo.
- set /p mouth= 请输入月份:
- echo.
- echo.
- set /p day= 请输入日期:
- set dir=%mouth%-%day%
- md %dir%
- for /f "delims=" %%a in ('dir /s /b /ad') do (copy "%dir%" "%%a")
- 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 |