MORE 命令通常会在每次显示全屏信息时暂停。但是如果输出被重定向或管道,那么它不会在每个屏幕后暂停。不幸的是,它不会继续无休止地打印,直到文件结束。如果输出被重定向或管道传输,它将在 ~64k 行 (~65535) 之后暂停。
您可以使用 FOR /F 循环来处理除第一行之外的所有内容,但这相对较慢。
我编写了一个名为 SKIP.BAT 的简单混合 JScript/Batch 实用程序,可用于跳过文件中的n行。它用作过滤器,比纯批处理 FOR 循环快得多。只需通过管道输入数据,它就会跳过您指定的行数。脚本当然可以改进。例如,它没有任何错误检查。
@if (@X)==(@Y) @end /* Harmless hybrid line that begins a JScript comment
::************ Batch portion ***********
@echo off
cscript //E:JScript //nologo "%~f0" %*
exit /b 0
************* JScript portion **********/
for (var i=0; i<WScript.Arguments.Item(0); i++) {
if (!WScript.StdIn.AtEndOfStream) WScript.StdIn.ReadLine();
}
while (!WScript.StdIn.AtEndOfStream) {
WScript.Stdout.WriteLine(WScript.StdIn.ReadLine());
}
只要上面的脚本在您的当前目录中,或者在您的 PATH 中,那么您的代码就可以简化为:
@echo off
>Stock.txt (for %%F in (req*.csv) do type "%%F" | skip 1)
或者,从命令行:
>Stock.txt (for %F in (req*.csv) do @type "%F" | skip 1)
当然,整个解决方案可以很容易地用纯 JScript 或 VBScript 编写。或者 CSV 连接可以集成到一个混合脚本中。但是拥有一个独立的 SKIP 实用程序对于批量开发很有用。