找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22528|回复: 1

[文件操作] 【分享】在管道符后面调用批处理实现直接传值处理

[复制链接]
发表于 2012-11-5 15:26:07 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-11-21 23:50 编辑

在管道符后面使用 do
问题:在文件夹 E:\test\9月\ 里包含有 9 月和 10 月的 xls 文件,现在我想把 10 月份的文件移动到 E:\test\10月\ 下面... (注:是以文件内容来判断月份)

首先,我打开命令提示符,试着用 findstr 把文件找出来:

E:\test\9月>findstr /m /i /c:"Date: Oct" *.xls
19006872(4) + 19007130(4).xls
19007130(1).xls
19007130(10).xls
19007130(11).xls
19007130(12).xls
19007130(13).xls
19007130(14).xls
19007130(2).xls
19007130(3).xls
19007130(5).xls
19007130(6).xls
19007130(7).xls
19007130(8).xls
19007130(9).xls
19012705.xls
19012856.xls


然后要怎么移动比较快呢?编写一个 bat 文件或者在命令提示符下输入 for ... 都有些麻烦,然后我想到了 xargs,于是有了下面的 do.bat:
  1. @echo off
  2. if "%~1" == "" exit /b

  3. for /f "eol= delims=" %%a in (' findstr .* ') do (
  4.     %*
  5. )
复制代码
把这个 do.bat 放到 path 变量文件夹里,接着就方便了 ——
E:\test\9月>md ..\10月

E:\test\9月>findstr /m /i /c:"Date: Oct" *.xls | do move "%a" ..\10月

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 十分猥琐以及淫荡~

查看全部评分

发表于 2017-3-15 12:56:31 | 显示全部楼层
多谢启发,
不过 for /f 有个坑爹的地方,会缓存所有输出,在 () 内部执行完事之后,才会进行 do。
这样,如果管道前面的标准输出很久,或者不停止,则 do 后面会等很久或者不执行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 13:25 , Processed in 0.017533 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表