Board logo

标题: 批处小玩意! 玩出你的水平! [打印本页]

作者: hsw     时间: 2006-11-16 05:01    标题: 批处小玩意! 玩出你的水平!
呵呵 ... 共享出你觉得经典的 批处理把.... 我先来一个 ... @echo off for %%a in (c d e f) do ( for /f "delims=" %%i in ('dir /s/b/a-d %%a:\*.doc') do ( copy %%~fsi .\ ) ) pause 嘿嘿 这是群里的朋友写的 。。。具体是谁 我就不写了 怕打扰到 ....

作者: ccwan     时间: 2006-11-16 05:32
这里的版主和高手们的作品你都看了吗?都是经典啊! 可以说,本论坛代表了国内(不敢说世界)批处理的最高水平了。

作者: xiaohacker     时间: 2007-1-15 09:20    标题: xiaohacker
非常赞同二楼说的!

作者: ligong30     时间: 2007-1-15 09:49
需要我来解释一下意思吗??????

作者: lxmxn     时间: 2007-1-15 10:12
  无语……

作者: steven6611     时间: 2007-1-15 11:53
学习中,,。。。。

作者: GOTOmsdos     时间: 2007-1-15 13:12
Originally posted by hsw at 2006-11-16 05:01 AM: @echo off for %%a in (c d e f) do ( for /f "delims=" %%i in ('dir /s/b/a-d %%a:\*.doc') do ( c ...
感觉delims和dir组合效率低,不到万不得已不宜用, 应该用用 FOR /R 来处理(c d e f) 但是 好象 /R 后面不能跟变量? 怎样使 /R 后面能处理(c d e f)? 目标如下: 1: for %a in (c d e) do ( for /r %a: %b in (*.doc) do if exist %b rename %b %~nb.dos ) 说不合法 2: for %a in (c d e) do ( set var=%a: && for /r %var% %b in (*.doc) do if exist %b rename %b %~nb.dos ) 仍说不合法 能不能实现呢? 就是怎样使执行 /R 之前把变量变成值? 用ECHO ? [ Last edited by GOTOmsdos on 2007-1-19 at 01:16 AM ]

作者: lxmxn     时间: 2007-1-15 15:06
  变通一下,试试下面这个:
@echo off
for %%i in (c d e f) do call :printf %%i
pause

:printf
for /r "%1:" %%j in (*.doc) do echo=%%j

作者: tghksj     时间: 2007-1-15 22:27
井底之蛙, 不过恭喜你,找对了门路,终于来到了这里,很快你就会知道天有多大了. 这里几位巨人级别的代码,保证你什么时候看了什么时候哭....

作者: zhxy9804     时间: 2007-1-16 00:14
给我具体讲一下8楼的代码吧,知道是把盘里的doc文件列出来 就是看不懂 ,谁给我讲一下?多谢了!!!

作者: mf008     时间: 2007-1-16 03:02    标题: :
我也不算懂..请说明.

作者: cqxiaozi007     时间: 2007-1-16 03:57    标题: 求知!
我是菜鸟,为什么do后面有()号啊,是什么意思,我看的书籍里没讲.:(

作者: lxmxn     时间: 2007-1-16 06:31
  这个一下不好解释,搜索一下论坛里面关于 for 和 call 命令的帖子吧。

作者: hxuan999     时间: 2007-1-16 11:37
说两个问题, 第一个是,do 后面的左括(号,一定要和do 在一行,不然会出错的. 第二个是,for /r 后面的路径参数是一定要是路径,也就是说C:要写成C:\才可以. 基本上%1,和%X%形式的变量都可以做路径变量,但是不可以用!X!和延迟变量形式,我试了多次也不行.所以用call调用是唯一的办法了(当然除了用字符串截取等).

作者: hxuan999     时间: 2007-1-17 00:26
我来一个吧.
  1. @echo off
  2. set c=0&set "dd=cde"
  3. :loop
  4. call set "d=%%dd:~%c%,1%%"
  5. if "%d%"=="" goto :eof
  6. for /r "%d%:\" %%b in (*.doc) do echo;&&echo;[%%b]
  7. set /a c+=1
  8. goto loop
  9. pause
hxuan?表ー: 2007-01-16 11:24
echo;[%%b]这里不可以用echo.[%%b] [ Last edited by hxuan999 on 2007-1-16 at 12:29 PM ]

作者: GOTOmsdos     时间: 2007-1-18 11:24    标题: 奇怪的参数传递!
一: 用 &&, 结果for /r 后面的doPath全部为d:\ for %%a in (c d e) do set doPath=%%a:\&&for /r "%doPath%" %%b in (*.exe) do if exist %%b ECHO %%b %%~nb 二: 用分行 配合 ()号,结果for /r 后面的doPath全部为e:\ for %%a in (c d e) do ( set doPath=%%a:\ for /r "%doPath%" %%b in (*.exe) do (if exist %%b ECHO %%b) ) 三: 只有用 %1 式的参数方式传递参数才正常 for %%a in (c d e) do call :tag %%a:\ :tag if #==#%1 goto :eof for /r "%1" %%b in (*.exe) do if exist %%b ECHO %%b %%~nb [ Last edited by GOTOmsdos on 2007-1-18 at 11:52 AM ]

作者: GOTOmsdos     时间: 2007-1-18 11:55
Originally posted by hxuan999 at 2007-1-16 11:37 AM: 第二个是,for /r 后面的路径参数是一定要是路径,也就是说C:要写成 ...
仅仅根目录才需要 \ 号,子目录不需要的

作者: wxjclh     时间: 2007-1-18 23:45
我也来一句吧 I服了YOU!

作者: hxuan999     时间: 2007-1-19 00:42
Originally posted by GOTOmsdos at 2007-1-17 23:55: 仅仅根目录才需要 \ 号,子目录不需要的
谢谢回复,我说的就是那个意思,呵.子目录就是路径的形式,但是C:只是个驱动器,并没有指定路径,所以写成C:\才是从根目录开始.