批处理文件,用于分析和显示csv文件中的数据

时间:2016-02-03 14:51:17

标签: csv batch-file

我想创建一个.bat文件,该文件将显示文件名以" Togo"开头的每个.csv文件的最后一行。 批处理文件将与.csv文件位于同一文件夹中。 要输出应该是: [文件名] [最后一行数据]

此批处理文件应始终运行并每5分钟测试一次.csv文件。

1 个答案:

答案 0 :(得分:1)

SO不是免费的代码编写服务。您的问题可能会被删除或关闭,因为您没有尝试解决问题。

话虽如此,批量开始很难,所以这是一个解决方案。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir\t w o"
FOR /f "delims=" %%a IN (
 'dir /b /a-d "%sourcedir%\togo*.csv" '
) DO (
 FOR /f "usebackqdelims=" %%q IN ("%sourcedir%\%%a") DO SET "line=%%q"
 ECHO %%a !line!
)

GOTO :EOF

前两行关闭批处理的调试显示(show-the-command,然后执行它)并调用一种模式,在该模式下访问已在"代码块中变化的变量" (带括号的一系列命令)已启用(通常,它已被禁用,只有遇到if(或其他)时的值才可用。)

第3行设置一个名为sourcedir的变量并为其赋值。封闭引号确保尾随空格不包含在指定的值中。我故意使用包含空格的目录名,因为这是一个常见问题,它证明了我的测试制度中的批次。您的目录名将不同 - 只需替换它。目录名表示"当前目录"

第4-6行可以组合成一个 - 只是文体学。这意味着"执行目录扫描,没有基本形式(/a-d)的目录名(/b),即名称仅在名称变量{{1并且其名称适合模式sourcedir。通过忽略默认分隔符并将结果(即目录列表的整行,即文件名)分配给元变量(循环控制变量)togo*.csv来处理每个结果行。

下一行读取从源目录名称和当前位于%%a的文件名构建的文件的每一行。 %%a设置为 nothing ,因此整行将分配给元变量delims%%q选项告诉usebackq括号内的字符串是一个带引号的文件名,而不是一个字符串(或者在第一个cmd中执行的单引号命令。)变量for随后将与文件中的每个连续行一起设置,因此当line结束时,;ine将包含文件的最后一行。

以下行显示for...%%q...中的文件名以及%%a中该文件最后一行的文字。

注意差异 - line访问元变量的内容%%x以访问变量的内容,但%var%访问更改的值(如果!var!已被调用)。

delayedexpansion表示"转到物理文件结尾" goto :eof了解CMD表示"物理文件结束"

所以 - 剪切并粘贴到一个名为的文件 .bat然后只需输入

即可运行
:eof

一般来说,

*whatever*

将为for /? 命令提供帮助,这适用于大多数批处理命令。看看成千上万的例子。

您也可以检查

for

了解如何实现timeout cls choice 目标的线索。您可能希望从任务计划程序运行此任务以获得every 5 minutes显示 - 许多方法可以实现相同的目的。