Board logo

标题: [文件操作] 【分享】在管道符后面调用批处理实现直接传值处理 [打印本页]

作者: tmplinshi    时间: 2012-11-5 15:26     标题: 【分享】在管道符后面调用批处理实现直接传值处理

本帖最后由 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月

作者: nidnil    时间: 2017-3-15 12:56

多谢启发,
不过 for /f 有个坑爹的地方,会缓存所有输出,在 () 内部执行完事之后,才会进行 do。
这样,如果管道前面的标准输出很久,或者不停止,则 do 后面会等很久或者不执行。




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