[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

评分人数

    • CrLf: 十分猥琐以及淫荡~技术 + 1

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

TOP

返回列表