中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 与 FOR 相似的 Windows 2003 的新命令行工具 Forfiles
作者:
标题: 与 FOR 相似的 Windows 2003 的新命令行工具 Forfiles 上一主题 | 下一主题
6622186
高级用户





积分 894
发帖 411
注册 2007-2-17
状态 离线
『楼 主』:  与 FOR 相似的 Windows 2003 的新命令行工具 Forfiles

下了一个 Windows 2003 的新命令行工具 .

**************************************************************
命令:Forfiles

  功能:从文件夹或文件树中选择要进行批处理的文件,也就是说,它能将搜索到的文件作为参数传递给后面的DOS命令,从而对搜索到的文件进行改名、删除、复制等操作。与DOS下的“For…In…Do”作用类似,但功能更强大。

  语法:forfiles [/p Path] [/m SearchMask] [/s] [/c Command] [/d[{+ | -}]

   [{MM/DD/YYYY | DD}]]

  参数:/p Path——指定搜索路径,表明要从哪里开始搜索,默认的文件夹是当前工作目录;

  /m SearchMask——按照 SearchMask设置的文件名参数搜索文件。默认的 SearchMask 是.,即所有文件,可使用通配符(?和)。比如:.exe表示搜索所有扩展名是.exe的文件、e??.表示搜索首字符是e、主文件名只有3个字符的所有文件;

  /s——在所有的子目录中进行搜索;

  /c Command——对搜索到的每个文件上实施指定的命令。带有空格的命令字符串必须用引号括起来。默认的命令是“'cmd /c echo @file'”,即显示全称文件名,包括路径、主文件名、扩展名等;

  /d[{+ | -}] [{MM/DD/YYYY | DD}]——选择日期大于或等于 (+)或者小于或等于 (-)指定日期的文件。

  实例:①清除D盘下的所有扩展名是.tmp的文件,请键入以下命令:

  forfiles /p d: /m .tmp /s /c "cmd /c del @file"

  ②将D盘下的所有扩展名是.jpg的文件扩展名改为.gg:

  forfiles /p d: /m *.jpg /s /c "cmd /c ren @file *.gg"

  ③只查找并显示盘目录:

  forfiles /p c: /s /m .  /c "cmd /c if @isdir==true echo @file is a directory"

  该命令行可以将C盘下的所有目录查找出来,并显示为类似“XXXX is a directory”的格式。



@set c=     不知则觉多,知则觉少,越知越多,便觉越来越少.        --- 知多少.
@for,/l,%%i,in,(1,1,55)do,@call,set/p=%%c:~%%i,1%%<nul&ping/n 1 127.1>nul


2007-6-17 15:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
6622186
高级用户





积分 894
发帖 411
注册 2007-2-17
状态 离线
『第 2 楼』:  

我感觉比 FOR 容易上手. 是不是比 FOR 强大, 我就不知道了.



@set c=     不知则觉多,知则觉少,越知越多,便觉越来越少.        --- 知多少.
@for,/l,%%i,in,(1,1,55)do,@call,set/p=%%c:~%%i,1%%<nul&ping/n 1 127.1>nul


2007-6-17 15:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 3 楼』:  

看名字感觉像是专门对文件操作的,如果是这样,灵活性好像不如for



2007-6-17 15:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
6622186
高级用户





积分 894
发帖 411
注册 2007-2-17
状态 离线
『第 4 楼』:  

无法上传?



@set c=     不知则觉多,知则觉少,越知越多,便觉越来越少.        --- 知多少.
@for,/l,%%i,in,(1,1,55)do,@call,set/p=%%c:~%%i,1%%<nul&ping/n 1 127.1>nul


2007-6-17 15:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
6622186
高级用户





积分 894
发帖 411
注册 2007-2-17
状态 离线
『第 5 楼』:  

似乎没 For 复杂, 还有 For 的 /l 参数, 恐怕难以实现,  可能如3楼所说, 专门对文件操作.



@set c=     不知则觉多,知则觉少,越知越多,便觉越来越少.        --- 知多少.
@for,/l,%%i,in,(1,1,55)do,@call,set/p=%%c:~%%i,1%%<nul&ping/n 1 127.1>nul


2007-6-17 16:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ansipeter
中级用户

替身



积分 269
发帖 130
注册 2007-3-23
状态 离线
『第 6 楼』:  

你们还是看看下面的帮助吧,这个跟FOR语句还是有很大差别的,主要是对多文件的操作,还有类似@FILE这样的参数,相信看完如下帮助你们就会掌握了

FORFILES.exe (Resource Kit)

Batch process multiple files

syntax
      FORFILES [-pPath] [-s] [-dDate] [-mMask] [-cCommand]

key
   -Path   : Path to search                   default=current folder

   -s       : Recurse into sub-folders

   -Date   : This can be
              +DDMMYY to select files newer than a given date
                      (filedate >=DDMMYY) or
              -DDMMYY to select files older than a given date
                      (filedate <=DDMMYY) or
              +DD to select files newer than DD days ago or
              -DD to select files older than DD days ago

   -Mask   : Search mask (wildcards allowed)  default=*.*
   -Command      : Command to execute on each file.  default="CMD /C Echo @FILE"

   -v             : Verbose report
The following variables can be used in -cCommand (must be upper case)

@FILE,
@FNAME_WITHOUT_EXT,
@EXT,
@PATH,
@RELPATH,

@ISDIR,
@FSIZE,
@FDATE,
@FTIME

To ECHO Hex characters in the Command use: 0xHH

Examples:

To find every text file on the C: driveFORFILES -pC:\ -s -m*.TXT -c"CMD /C Echo @FILE is a text file"To show the path of every HTML file on the C: drive
FORFILES -pC:\ -s -m*.HTML -c"CMD /C Echo @RELPATH is the location of @FILE"List every folder on the C: driveFORFILES -pC:\ -s -m*. -c"CMD /C if @ISDIR==TRUE echo @FILE is a folder"For every file on the C: drive list the file extension in double quotesFORFILES -pc:\ -s -m*.* -c"CMD /c echo extension of @FILE is 0x22@EXT0x22"

List every file on the C: drive last modified over 100 days ago
FORFILES -pc:\ -s -m*.* -d-100 -c"CMD /C Echo @FILE : date >= 100 days"Find files last modified before 01-Jan-1995
FORFILES -pc:\ -s -m*.* -d-010195 -c"CMD /C Echo @FILE is quite old!"

note:
'0x22' is hex 22 - the double quote character - put these around any long filenames

2007-6-17 19:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 7 楼』:  

怎么和 for 相似那?楼主貌似不常用for

2007-6-17 20:01
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
wangjf
中级用户




积分 254
发帖 63
注册 2003-4-8
状态 离线
『第 8 楼』:  

Windows2003 SP2中的FORFILES.EXE文件的帮助显示

Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.

forfiles /?
=============================================
FORFILES [/P pathname] [/M searchmask] [/S]
         [/C command] [/D [+ | -] {yyyy-MM-dd | dd}]

描述:
    选择一个文件(或一组文件)并在那个文件上
    执行一个命令。这有助于批处理作业。

参数列表:
    /P    pathname      表示开始搜索的路径。默认文件夹是当前工作的
                        目录 (.)。

    /M    searchmask    根据搜索掩码搜索文件。默认搜索掩码是 '*'。

    /S                  指导 forfiles 递归到子目录。像 "DIR /S"。

    /C    command       表示为每个文件执行的命令。命令字符串应该
                        用双引号括起来。

                        默认命令是 "cmd /c echo @file"。下列变量
                        可以用在命令字符串中:
                        @file    - 返回文件名。
                        @fname   - 返回不带扩展名的文件名。
                        @ext     - 只返回文件的扩展。
                        @path    - 返回文件的完整路径。
                        @relpath - 返回文件的相对路径。
                        @isdir   - 如果文件类型是目录,返回 "TRUE";
                                   如果是文件,返回 "FALSE"。
                        @fsize   - 以字节为单位返回文件大小。
                        @fdate   - 返回文件上一次修改的日期。
                        @ftime   - 返回文件上一次修改的时间。

                        要在命令行包括特殊字符,字符请以 0xHH
                        形式使用十六进制代码(例如,0x09 为 tab)。
                        内部 CMD.exe 命令前面应以 "cmd /c" 开始。

    /D    date          选择文件,其上一次修改日期大于或等于 (+),
                        或者小于或等于 (-) 用 "yyyy-MM-dd" 格式指定的日期;
                        或选择文件,其上一次修改日期大于或等于 (+)
                        当前日期加 "dd" 天,或者小于或等于 (-) 当前
                        日期减 "dd" 天。有效的 "dd" 天数可以是
                        0 - 32768 范围内的任何数字。如果没有指定,
                        "+" 被当作默认符号。

    /?                  显示帮助消息。

例如:
    FORFILES /?
    FORFILES
    FORFILES /P C:\WINDOWS /S /M DNS*.*
    FORFILES /S /M *.txt /C "cmd /c type @file | more"
    FORFILES /P C:\ /S /M *.bat
    FORFILES /D -30 /M *.exe
             /C "cmd /c echo @path 0x09 在 30 前就被更改。"
    FORFILES /D 2001-01-01
             /C "cmd /c echo @fname 在 2001年1月1日就是新的。"
    FORFILES /D +2007-6-18 /C "cmd /c echo @fname 今天是新的。"
    FORFILES /M *.exe /D +1
    FORFILES /S /M *.doc /C "cmd /c echo @fsize"
    FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"
============================================
已经上传。地址:
http://zhenlove.com.cn/cndos/fileup/files/forfiles.zip

[ Last edited by wangjf on 2007-6-18 at 10:42 AM ]

2007-6-18 10:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
6622186
高级用户





积分 894
发帖 411
注册 2007-2-17
状态 离线
『第 9 楼』:  

8 楼, 我怎么传不上去?



@set c=     不知则觉多,知则觉少,越知越多,便觉越来越少.        --- 知多少.
@for,/l,%%i,in,(1,1,55)do,@call,set/p=%%c:~%%i,1%%<nul&ping/n 1 127.1>nul


2007-6-18 17:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wangjf
中级用户




积分 254
发帖 63
注册 2003-4-8
状态 离线
『第 10 楼』:  



我也不知道。

2007-6-18 17:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
6622186
高级用户





积分 894
发帖 411
注册 2007-2-17
状态 离线
『第 11 楼』:  

大家用过, 是否好用?



@set c=     不知则觉多,知则觉少,越知越多,便觉越来越少.        --- 知多少.
@for,/l,%%i,in,(1,1,55)do,@call,set/p=%%c:~%%i,1%%<nul&ping/n 1 127.1>nul


2007-6-23 22:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yk80
初级用户





积分 26
发帖 11
注册 2008-1-17
状态 离线
『第 12 楼』:  

forfiles 只是对修改日期的前后进行判断,如果我要用创建日期进行判断该怎么处理呢?

2008-1-24 16:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 13 楼』:  

用any2hex转换后 直接粘贴上来.
貌似上传系统XX了..

2008-1-24 16:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yk80
初级用户





积分 26
发帖 11
注册 2008-1-17
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by knoppix7 at 2008-1-24 04:55 PM:
用any2hex转换后 直接粘贴上来.
貌似上传系统XX了..

any2hex是个转换命令吗 ,怎么个用法!

2008-1-25 13:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: