标题: [文件操作] 【分享】在管道符后面调用批处理实现直接传值处理 [打印本页]
作者: 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:- @echo off
- if "%~1" == "" exit /b
-
- for /f "eol= delims=" %%a in (' findstr .* ') do (
- %*
- )
复制代码
把这个 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 |