使用批处理脚本仅打开文件夹中的非零文本文件

Posted

技术标签:

【中文标题】使用批处理脚本仅打开文件夹中的非零文本文件【英文标题】:Open only non-zero text files from a folder using batch script 【发布时间】:2015-01-29 06:40:54 【问题描述】:

如何使用批处理脚本打开目录中的所有文本文件(.txt),其中包含一些数据(大小不是 0)。

提前致谢。

【问题讨论】:

【参考方案1】:
for %%a in ("c:\folder\*.txt") do if %%~za gtr 0 start "" "%%~fa"

for 命令将遍历与in 子句匹配的文件。对于找到的每个文件,执行 do 子句中的代码并引用存储在可替换参数中的文件(此示例中为 %%a

%%~za 是文件的大小,%%~fa 是带有完整路径的文件引用。因此,代码意味着:对于指定文件夹中的每个 txt 文件,如果文件的大小大于 0,则使用与其关联的任何应用程序启动文件

注意:start 命令将第一个引用的参数作为启动窗口的标题。由于引用文件引用以防止出现空格问题,因此包含空引号以避免文件引用被读取为标题

【讨论】:

不知道为什么,但 in ("c:\folder\*.txt") 从命令行对我不起作用 (Win8.1),只显示一个文件。使用in ('dir /b "c:\folder\*.txt"') 显示所有文件,但没有~z 修改值,除了列表中的最后一个文件。必须使用in ('dir /b /s "c:\folder\*.txt"') 是的,我看到/f 是罪魁祸首(在我的脑海中)。你是对的for %%a in ("c:\folder\*.txt") do ...。但是,for /F "tokens=*" %I in ('dir /B "c:\folder\*.txt"') do @echo %~fI %~zI %~tI 仅显示文件名,没有预期的文件大小和时间。使用 dir /B /S 它可以工作。 有一个关于同样问题的新问题:DOS Batch File Variable Modifier Returns Blank 所以我会切换到那里^Z @josefz, for /f 处理文本。如果您当前的活动目录不是forin 子句中指示的,因为dir /b 只返回文件名,如果您尝试获取文件的大小(即在另一个文件夹中)它由于找不到文件,将失败(空白值)。附加的/s 使dir 命令包含文件的完整路径,因此,现在找到了文件并返回了大小【参考方案2】:

这将解释如何在批处理文件中循环文件并根据文件大小有条件地执行某些操作。

How can I check the size of a file in a Windows batch script?

然后您可以修改它以使用记事本或其他程序打开文件。

【讨论】:

以上是关于使用批处理脚本仅打开文件夹中的非零文本文件的主要内容,如果未能解决你的问题,请参考以下文章

带有 Git 命令错误处理的 Powershell - 在来自外部程序的非零退出代码时自动中止

一个文本处理的perl脚本

从批处理脚本替换文本文件中的行

来自批处理脚本的非模态通知框

linux之文本内容替换命令sed

如何使用bat脚本批处理所有txt文本文件中的每一行开头添加一个指定字符