我想创建一个.bat文件,该文件将显示文件名以" Togo"开头的每个.csv文件的最后一行。 批处理文件将与.csv文件位于同一文件夹中。 要输出应该是: [文件名] [最后一行数据]
此批处理文件应始终运行并每5分钟测试一次.csv文件。
答案 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
显示 - 许多方法可以实现相同的目的。